__init__ para unittest.TestCase

Me gustaría agregar un par de cosas a lo que hace la clase unittest.TestCase al ser inicializado pero no puedo averiguar cómo hacerlo.

Ahora mismo estoy haciendo esto:

 #filename test.py class TestingClass(unittest.TestCase): def __init__(self): self.gen_stubs() def gen_stubs(self): # Create a couple of tempfiles/dirs etc etc. self.tempdir = tempfile.mkdtemp() # more stuff here 

Me gustaría que todos los talones se generen solo una vez para todo este conjunto de pruebas. No puedo usar setUpClass() porque estoy trabajando en Python 2.4 (tampoco he podido hacer que funcione en Python 2.7).

¿Qué estoy haciendo mal aquí?

Me sale este error:

  `TypeError: __init__() takes 1 argument (2 given)` 

… y otros errores cuando muevo todo el código de código auxiliar a __init__ cuando lo ejecuto con el comando python -m unittest -v test .

Prueba esto:

 class TestingClass(unittest.TestCase): def __init__(self, *args, **kwargs): super(TestingClass, self).__init__(*args, **kwargs) self.gen_stubs() 

Está anulando el TestCase de __init__ , por lo que es posible que desee dejar que la clase base maneje los argumentos por usted.

Instala unittest2 y usa el unittest de ese paquete.

 import unittest2 

y luego use la clase setupModule / tearDownModule o setupClass / tearDown para una lógica de inicialización especial

Más información: http://www.voidspace.org.uk/python/articles/unittest2.shtml

También es muy probable que esté creando una prueba de integración más que una prueba de unidad. Elija un buen nombre para las Pruebas para diferenciarlas o colóquelas en un módulo contenedor diferente.

Solo quería agregar algunas aclaraciones acerca de anular la función init de

 unittest.TestCase 

La función se llamará antes de cada método en su clase de prueba. Tenga en cuenta que si desea agregar algunos cálculos costosos que deben realizarse una vez antes de ejecutar todos los métodos de prueba, utilice el método de clase SetUpClass

 @classmethod def setUpClass(cls): cls.attribute1 = some_expensive_computation() 

Esta función se llamará una vez antes de todos los métodos de prueba de la clase. Consulte la configuración de un método que se llama antes de cada método de prueba.