Временно отключите отдельные модульные тесты Python

StackOverflow https://stackoverflow.com/questions/2066508

  •  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.На странице, где показан мой тестовый код, рядом с определением каждого теста есть небольшой значок.Я могу щелкнуть этот значок и запустить этот тест индивидуально.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top