2011-08-11 18 views
6

Estoy tratando de comenzar con unittest, pero tengo un problema al obtener setUpClass() para que funcione. Aquí está mi código de prueba ...Unittest setUpClass no funciona

import unittest 

class TestRepGen(unittest.TestCase): 
    """ Contains methods for training data testing """ 

    testvar = None 

    @classmethod 
    def setUpClass(cls): 
     cls.testvar = 6 

    def test_method(self): 
     """ Ensure data is selected """ 
     self.assertIsNotNone(self.testvar,"self.testvar is None!") 

# run tests 
if __name__ == '__main__': 
    unittest.main() 

Se muestra el mensaje de error de aserción, lo que indica que self.testvar == None, y no ha sido cambiado por setUpClass(). ¿Hay algún problema con mi código?

Obtengo el mismo resultado si ejecuto el código desde mi IDE (Wing) o directamente desde la línea de comandos. Para el registro, estoy usando Python 3.2.1 en Windows7.

+0

He intentado su código en Python 2.7 en Windows 7. Funciona bien, la prueba pasa. Si ejecuta _exactly_ el script anterior, ¿realmente no funciona para usted? documentos para Python 3.3 no indican ningún cambio en el comportamiento de 'setUpClass'. – agf

+0

El código que pegó me ​​funciona en python27 y python 3.2.1 en Windows 7. – stderr

+0

¿Tiene alguna razón por la que está utilizando setUpClass? ¿Por qué no? simplemente use 'def setUp (self)'? – Bogdan

Respuesta

1

Ok, es hora de admitir que fue un error mío. Estaba usando 3.1.2 cuando debería haber estado (y pensé que estaba) usando 3.2.1. Ahora he cambiado a la versión correcta, todo está bien y la prueba está pasando. Muchas gracias a todos los que respondieron (y perdón por perder el tiempo :-().

5

Voy a adivinar que no está llamando a esta clase de prueba directamente, sino a una clase derivada.

Si ese es el caso, tiene que llamar manualmente al setUpClass() - no se llama automáticamente.

class TestB(TestRepGen): 
    @classmethod 
    def setUpClass(cls): 
     super(TestB, cls).setUpClass() 

Además, accoding the docsclass-level fixtures are implemented by the test suite. Entonces, si llama al TestRepGen o test_method de alguna manera extraña que no publicó, setUpClass podría no ejecutarse.

+0

agf - Estaba llamando a la clase directamente, pero eventualmente iba a ser subclasificada, por lo que sus comentarios son útiles. Gracias. –

+0

@ Alan: debe publicar su solución como una respuesta y aceptarla. – agf

+0

Solución publicada. –

10

setUpClass es nuevo en el framework unittest a partir de 2.7 y 3.2. Si desea utilizarlo con una versión anterior, deberá usar nose como su corredor de prueba en lugar de unittest.

+0

¡Buena captura! Me preguntaba por qué setUpClass no funcionaba. – fthinker

+0

* testrunner de zope.testing * no admite 'setUpClass()' tampoco. – jnns

Cuestiones relacionadas