Временно отключите отдельные модульные тесты Python
-
20-09-2019 - |
Вопрос
Как можно временно отключить отдельные модульные тесты при использовании unittest
модуль на Python?
Решение
Отдельные методы тестирования или классы можно отключить с помощью 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.')
Другие варианты см. в документации для Пропуск тестов и ожидаемые сбои.
Другие советы
Вы можете использовать декораторы, чтобы отключить тест, который может обернуть функцию и запретить модульному тесту googletest или python запускать тестовый пример.
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()
Выход:
testFoo has been disabled
Последняя версия (2.7 – неизданная) поддерживает пропуск/отключение тестов следующим образом..Вы можете просто получить этот модуль и использовать его в существующей установке Python.Вероятно, это сработает.
До этого я переименовывал тесты, которые хотел пропустить. xtest_testname
от test_testname
.
Вот быстрый скрипт elisp для этого.Мой elisp немного заржавел, поэтому заранее приношу извинения за возможные проблемы.Непроверенный.
(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_"))))
Просто разместив @unittest.SkipTest
декоратора над тестом достаточно.
Я просто переименовываю метод тестового примера с подчеркиванием:test_myfunc становится _test_myfunc.
Тот Самый Документы для 2.1 не указывайте метод игнорирования или пропуска.
Однако обычно я блокирую комментарии, когда это необходимо.
Сосредоточившись на «временно отключенной» части вопроса, лучший ответ в некоторой степени зависит от варианта использования.Случай использования, который привел меня сюда, заключается в том, что я занимаюсь разработкой функции через тестирование.В этом процессе я последовательно пишу тесты и часто использую точки останова в функции для отладки.Если я просто запускаю все тесты каждый раз, когда запускаю средство запуска тестов, я в конечном итоге остановлюсь в точках останова для тестов, которые уже работают.Добавление «пропустить», изменение имени теста или что-то в этом роде — это не то, чего я хочу, потому что, когда я закончу писать функцию, я хочу, чтобы все тесты запускались.Если бы я использовал «пропустить», мне пришлось бы вернуться и «отменить пропуск».
В моем случае решение лежит в средстве запуска тестов, а не в тестовом коде.я использую pytest.С помощью pytest легко указать один тест из командной строки:
pytest PYTHON_FILENAME.TEST_CLASS.TEST_NAME
(замените шапки своими значениями).
Я понимаю, что этот вопрос был для Python-Unitest.Я давно этим не пользовался.Я бы не удивился, если бы там было что-то похожее на pytest.Если нет, вы можете легко переключиться на pytest.Вам не нужно изменять свой код.Просто установите его и измените команду запуска тестов.
Кроме того, я использую PyCharm Pro.На странице, где показан мой тестовый код, рядом с определением каждого теста есть небольшой значок.Я могу щелкнуть этот значок и запустить этот тест индивидуально.