Respuestas:
Los métodos o clases de prueba individuales se pueden deshabilitar usando el unittest.skip
decorador.
@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, consulte los documentos para las pruebas de omisión y las fallas esperadas .
@unittest.skip
también funciona bien.
@unittest.skip
no funciona.
Puede usar decoradores para deshabilitar la prueba que puede ajustar la función y evitar que la prueba de unidad googletest o python ejecute el caso de prueba.
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 - inédita) admite la omisión / desactivación de pruebas de esta manera . Puede obtener este módulo y usarlo en su instalación existente de Python. Probablemente funcionará.
Antes de esto, solía cambiar el nombre de las pruebas que quería salté a xtest_testname
partir test_testname
.
Aquí hay un script rápido de elisp para hacer esto. Mi elisp está un poco oxidado, así que me disculpo de antemano 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_"))))
Simplemente colocar @unittest.SkipTest
decorador encima de la prueba es suficiente.
unittest.skip
(sin razón) me da un error en Python 2 pero no en Python 3.
Los documentos para 2.1 no especifican un método de ignorar u omitir.
Por lo general, bloqueo el comentario cuando es necesario.
Centrándose en la parte "temporalmente deshabilitada" de la pregunta, la mejor respuesta depende un poco del caso de uso. El caso de uso que me trajo aquí es que estoy haciendo un desarrollo basado en 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 solo ejecuto todas las pruebas cada vez que ejecuto el corredor de prueba, termino deteniéndome en los puntos de interrupción para las pruebas que ya funcionan. Agregar "omitir" o mezclar 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 "skip", tendría que regresar y "unskip".
Para mi caso de uso, la solución se encuentra 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 era para python-unitest. No lo he usado en mucho tiempo. No me sorprendería si tuviera algo similar a Pytest. Si no, puede cambiar fácilmente a pytest. No necesita modificar su código. Simplemente instálelo y cambie su comando de corredor de prueba.
Además, uso PyCharm Pro. En la página que muestra mi código de prueba, hay un pequeño icono al lado de la definición para cada prueba. Puedo hacer clic en ese icono y ejecutar esa prueba individualmente.
@unittest.SkipTest
funciona y no@unittest.skip