Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Индивидуальные методы тестирования или классы могут быть отключены с помощью unittest.skip decorator.

@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.')

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

Ответ 2

Вы можете использовать декораторы для отключения теста, который может обернуть функцию и предотвратить запуск googletest или python unit test для запуска тестового файла.

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

Ответ 3

Последняя версия (2.7 - unreleased) поддерживает пропущение/отключение теста таким образом. Вы можете просто получить этот модуль и использовать его на существующей установке Python. Это, вероятно, будет работать.

До этого я использовал переименование тестов, которые я хотел пропустить до xtest_testname от test_testname.


Здесь для быстрого удаления script. Мой 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_"))))

Ответ 4

Просто размещение декоратора @unittest.SkipTest над тестом достаточно.

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

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

pytest PYTHON_FILENAME.TEST_CLASS.TEST_NAME

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

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

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

Ответ 8

если это pytest, то вы можете пропустить его так: @pytest.mark.skip("причина пропуска")