Временно отключите отдельные юнит-тесты Python - PullRequest
93 голосов
/ 14 января 2010

Как можно временно отключить отдельные модульные тесты при использовании модуля unittest в Python?

Ответы [ 7 ]

177 голосов
/ 22 апреля 2013

Отдельные методы или классы испытаний можно отключить с помощью декоратора 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.')

Другие варианты см. В документах по Пропуску тестов и ожидаемых сбоев .

25 голосов
/ 14 января 2010

Вы можете использовать декораторы, чтобы отключить тест, который может обернуть функцию и предотвратить запуск модульного теста 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
11 голосов
/ 14 января 2010

Последняя версия (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_"))))
8 голосов
/ 24 февраля 2017

Достаточно просто поместить @unittest.SkipTest декоратор над тестом.

5 голосов
/ 14 января 2010

Я просто переименую метод контрольного примера в подчеркивание: test_myfunc становится _test_myfunc.

3 голосов
/ 14 января 2010

В документах для 2.1 не указан метод игнорирования или пропуска.

Обычно, однако, я блокирую комментарий, когда это необходимо.

1 голос
/ 06 февраля 2019

Сосредоточив внимание на «временно отключенной» части вопроса, лучший ответ в некоторой степени зависит от варианта использования. Сценарий использования, который привел меня сюда, заключается в том, что я выполняю тестовую разработку функции. В этом процессе я последовательно пишу тесты и часто использую точки останова в функции для отладки. Если я просто запускаю все тесты каждый раз, когда запускаю тестировщика, я останавливаюсь в точках останова для тестов, которые уже работают. Добавление «пропуска» или изменение имени теста или чего-то подобного - это не то, что я хочу, потому что когда я закончу писать функцию, я хочу, чтобы все тесты выполнялись. Если бы я использовал «пропустить», мне пришлось бы вернуться и «отменить».

Для моего варианта использования решение заключается в тестовом прогоне, а не в тестовом коде. Я использую pytest . С помощью pytest можно легко указать один тест из командной строки:

pytest PYTHON_FILENAME.TEST_CLASS.TEST_NAME

(замените заглавные буквы на ваши значения).

Я понимаю, что этот вопрос был для python-unitest. Я не использовал это в течение длительного времени. Я бы не удивился, если бы у него было что-то похожее на pytest. Если нет, вы можете легко переключиться на pytest. Вам не нужно изменять свой код. Просто установите его и измените команду запуска теста.

Также я использую PyCharm Pro. На странице с моим тестовым кодом рядом с определением для каждого теста есть маленькая иконка. Я могу щелкнуть этот значок и запустить этот тест по отдельности.

...