python py.test

python - Py.test salta la clase de prueba si el constructor está definido



(2)

Tengo el siguiente código unittest que se ejecuta a través de py.test. La mera presencia del constructor hace que toda la clase se salte cuando se ejecuta py.test -v -s

Obtenido 0 ítems / 1 omitido

¿Alguien puede explicarme este comportamiento de py.test?

Estoy interesado en entender el comportamiento 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 deliberadamente 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 es lo contrario y mucho más raro no tener un método .__init__() para una clase. Entonces, en la práctica, omitir una clase con un constructor probablemente sea lo que se desea, generalmente 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 crear una instancia, así que volver a saltar es lo correcto.


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

  • la recopilación comienza desde los argumentos iniciales de la línea de comandos, que pueden ser directorios, nombres de archivo o identificadores de prueba. recurse en directorios, a menos que coincidan con norecursedirs
  • test _ *. py o * _test.py archivos, importados por su nombre de paquete.
  • Test las clases de prueba prefijadas (sin un método __init__ ) [ <- observe esto aquí ]
  • test_ prefixed test functions or methods are test items

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