Deshabilita las pruebas individuales de unidades de Python temporalmente

¿Cómo se pueden desactivar temporalmente las pruebas de unidades individuales al usar el módulo unittest en Python?

Los métodos de prueba individuales o las clases se pueden desactivar usando el decorador unittest.skip .

 @unittest.skip("reason for skipping") def test_foo(): print('This is foo test case.') @unittest.skip # no reason needed def test_bar(): print('This is bar test case.') 

Para otras opciones, vea los documentos para Saltar pruebas y fallas esperadas .

Puede usar decoradores para deshabilitar la prueba que puede envolver la función y evitar que la prueba de unidad de python o googletest ejecute el testcase.

 def disabled(f): def _decorator(): print f.__name__ + ' has been disabled' return _decorator @disabled def testFoo(): '''Foo test case''' print 'this is foo test case' testFoo() 

Salida:

 testFoo has been disabled 

La última versión (2.7 – no lanzada) es compatible con la omisión / desactivación de pruebas . Puede obtener este módulo y utilizarlo en su instalación de Python existente. Probablemente funcionará.

Antes de esto, solía cambiar el nombre de las pruebas que quería que se xtest_testname a xtest_testname desde test_testname .


Aquí hay una secuencia de comandos rápida para hacer esto. Mi elisp está un poco oxidado, así que me disculpo por adelantado por cualquier problema que tenga. No probado

  (defun disable_enable_test () (interactive "") (save-excursion (beginning-of-line) (search-forward "def") (forward-char) (if (looking-at "disable_") (zap-to-char 1 ?_) (insert "disable_")))) 

Basta con colocar el decorador @unittest.SkipTest sobre la prueba.

Acabo de cambiar el nombre de un método de caso de prueba con un guión bajo: test_myfunc se convierte en _test_myfunc.

Los documentos para 2.1 no especifican un método de ignorar o saltar.

Normalmente, sin embargo, locking el comentario cuando es necesario.

Centrándose en la parte “temporalmente deshabilitada” de la pregunta, la mejor respuesta depende en cierta medida del caso de uso. El caso de uso que me trajo aquí es que estoy haciendo un desarrollo guiado por pruebas en una función. En este proceso, escribo sucesivamente pruebas y, a menudo, uso puntos de interrupción en la función para la depuración. Si ejecuto todas las pruebas cada vez que ejecuto el corredor de pruebas, termino deteniéndome en los puntos de interrupción para las pruebas que ya funcionan. Agregar “omitir” o mungear el nombre de la prueba o algo así no es lo que quiero porque cuando termine de escribir la función, quiero que se ejecuten todas las pruebas. Si usara “omitir” tendría que volver atrás y “desincrustar”.

Para mi caso de uso, la solución está en el corredor de prueba, no en el código de prueba. Yo uso pytest . Con pytest, es fácil especificar una sola prueba desde la línea de comando:

pytest PYTHON_FILENAME.TEST_CLASS.TEST_NAME

(Reemplace las tapas con sus valores).

Entiendo que esa pregunta fue para python-unitest. No lo he usado en mucho tiempo. No me sorprendería si tuviera algo similar a pytest. Si no, puedes cambiar fácilmente a pytest. No necesita modificar su código. Solo instálalo y cambia el comando de tu corredor de prueba.

Además, yo uso PyCharm Pro. En la página que muestra mi código de prueba, hay un pequeño icono junto a la definición de cada prueba. Puedo hacer clic en ese ícono y ejecutar esa prueba individualmente.