Pruebas Unitarias Python
Pruebas Unitarias Python
Pruebas Unitarias Python
Introduccin al
desarrollo dirigido por
pruebas
EXTREME PROGRAMMING
A la vez, esta tcnica te permitirn saber: qu, cmo, cules y cuntos algoritmos
necesitars desarrollar para que tu aplicacin haga lo que realmente debe hacer y no
falle, ante ciertos casos que no son los que se esperaban.
18
http://www.dirigidoportests.com/el-libro
Carlos Bl Jurado en su libro Diseo gil con TDD nos define la tcnica de TDD como:
Pg. 52
2. Independiente:
Cada Test Unitario DEBE ser independiente de otro.
Por ejemplo, siguiendo el caso anterior, el test que verifique la suma de un
importe bruto ms su IVA correspondiente, no debe depender del test que
verifica el clculo del IVA.
3. Inocuo:
Podra decirse que cada test unitario debe ser inofensivo para el sistema.
Un test unitario DEBE poder correrse sin alterar ningn elemento del sistema, es
decir, que no debe, por ejemplo, agregar, editar o eliminar registros de una base
de datos.
4. Rpido:
La velocidad de ejecucin de un test unitario cumple un papel fundamental e
ineludible en el desarrollo guiado por pruebas, ya que de la velocidad de
ejecucin de un test, depender de manera proporcional, la velocidad con la que
una funcionalidad se desarrolle.
Pg. 53
Anatoma de un Test
Los Test Unitarios se realizan, en cualquier lenguaje de programacin, mediante
herramientas que proveen un completo entorno de trabajo (Frameworks para Unit
Testing). Estos entornos de trabajo, son desarrollados con un formato determinado,
conocido como xUnit.
De all, que los frameworks para Unit Testing que cumplen con dicho formato, suelen
tener nombres compuestos por una abreviatura del lenguaje de programacin, seguida
del trmino unit. Por ejemplo: PyUnit (Python), PHPUnit (PHP), ShUnit (Shell
Scripting), etc.
Exceptuando el caso de Shell Scripting, los frameworks xUnit de lenguajes que
soportan la orientacin a objetos, utilizan ste paradigma tanto en su anatoma de
desarrollo como para su implementacin (creacin de los test unitarios).
Por lo tanto, los Test Unitarios se agrupan en clases, denominadas Test Case, que
heredan de una clase del framework xUnit, llamada xTestCase:
# Ejemplo con PyUnit
import unittest
class BalanceContableTestCase(unittest.TestCase):
pass
# Ejemplo con PHPUnit
class BalanceContableTest extends PHPUnit_Framework_TestCase {
}
Los mtodos contenidos en una clase Test Case, pueden o no, ser Test Unitarios. Los
Test Unitarios contenidos en una clase Test Case, deben contener el prefijo test_
en el nombre del mtodo a fin de que el framework los identifique como tales:
# Ejemplo con PyUnit
import unittest
class BalanceContableTestCase(unittest.TestCase):
def test_calcular_iva(self):
pass
# Ejemplo con PHPUnit
class BalanceContableTest extends PHPUnit_Framework_TestCase {
public function test_calcular_iva() {
}
}
Otra ventaja que los frameworks xUnit nos proveen, es la facilidad de poder crear dos
mtodos especiales dentro de una clase Test Case -que no son test-, los cuales estn
2013 HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported
Pg. 54
destinados a preparar el escenario necesario para correr los test de esa clase y
eliminar aquello que se desee liberar, una vez que el test finalice. Estos mtodos, son
los denominados setUp() y tearDown() respectivamente:
# Ejemplo con PyUnit
class BalanceContableTestCase(unittest.TestCase):
def setUp(self):
self.importe_bruto = 100
self.alicuota_iva = 21
def tearDown(self):
self.importe_bruto = 0
self.alicuota_iva = 0
def test_calcular_iva():
pass
# Ejemplo con PHPUnit
class BalanceContableTest extends PHPUnit_Framework_TestCase {
public function setUp() {
$this->importe_bruto = 100;
$this->alicuota_iva = 21;
}
public function tearDown() {
$this->importe_bruto = 0;
$this->alicuota_iva = 0;
}
public function test_calcular_iva() {
}
}
Los mtodos assert (mtodos de afirmacin), son mtodos que vienen definidos por
defecto en el framework xUnit, destinados a verificar un resultado. Los nombres de
estos mtodos suelen ser muy similares entre los diversos frameworks, como por
2013 HDMagazine.org Creative Commons Atribucin NoComercial CompartirIgual 3.0 Unported
Pg. 55
ejemplo assertTrue() para verificar que el valor del resultado de la actuacin, devuelto
por el SUT, sea True. Pero los veremos en detalle en la prxima entrega.
Si quieres ir conociendo los mtodos assert, puedes ir visitando las referencias oficiales: P yUnit:
http://docs.python.org/2/library/unittest.html#test-cases y PHPUnit:
http://www.phpunit.de/manual/current/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.assertions
Por favor, notar que mientras que PyUnit viene incluido como un mdulo estndar de
Python, PHPUnit, requiere de instalacin por separado. En la prxima entrega,
abarcaremos tambin la instalacin de PHPUnit.
PRIMER PASO: Escribir el Test y hacer que falle (retornando en el SUT, un valor
contrario al que se espera que devuelva en realidad)
TERCER PASO: Escribir un nuevo test (para el mismo SUT) y esperando que falle
el nuevo test.
Pg. 56