py.test omite la clase de prueba si se define el constructor

Tengo el siguiente código unittest ejecutando via py.test. La mera presencia del constructor hace que toda la clase se salte al ejecutar py.test -v -s

recogió 0 artículos / 1 saltado

¿Puede alguien explicarme este comportamiento de py.test?

Estoy interesado en comprender el comportamiento de py.test, sé que el constructor no es necesario.

Gracias zdenek

class TestClassName(object): def __init__(self): pass def setup_method(self, method): print "setup_method called" def teardown_method(self, method): print "teardown_method called" def test_a(self): print "test_a called" assert 1 == 1 def test_b(self): print "test_b called" assert 1 == 1 

Como ya se mencionó en la respuesta de Matti Lyra py.test omite a propósito las clases que tienen un constructor. La razón de esto es que las clases solo se usan por razones estructurales en py.test y no tienen ningún comportamiento inherente, mientras que cuando se escribe código en realidad es lo contrario y mucho más raro no tener un método .__init__() para una clase. Por lo tanto, en la práctica, saltarse una clase con un constructor probablemente sea lo que se deseaba, por lo general es solo una clase que tiene un nombre conflictivo.

Por último, py.test necesita crear una instancia de la clase para ejecutar las pruebas. Si el constructor toma algún argumento, no puede instanciarlo, por lo que nuevamente saltarse es lo correcto.

La documentación para py.test dice que py.test implementa el siguiente descubrimiento de prueba estándar:

  • la recostackción comienza a partir de los argumentos de línea de comando iniciales que pueden ser directorios, nombres de archivos o identificadores de prueba. consultar en directorios, a menos que coincidan con norecursedirs
  • Pruebe los archivos _ *. py o * _test.py, importados por su nombre de paquete.
  • Test clases de prueba con prefijo (sin un método __init__ ) [ <- observe esto aquí ]
  • test_ funciones de prueba o los métodos de prueba con prefijo son elementos de prueba

Entonces, no es que el constructor no sea necesario, py.test simplemente ignora las clases que tienen un constructor. También hay una guía para cambiar el descubrimiento de prueba estándar.