Как остановить Python unittest от печати тестовой строки документации?
Я заметил, что когда мои модульные тесты Python содержат документацию в верхней части функции, иногда фреймворк печатает их в результатах теста. Обычно тестовый вывод содержит один тест на строку:
<test name> ... ok
Если тест имеет строку документации в форме
"""
test that so and so happens
"""
чем все хорошо. Но если в тесте есть все строки документации в одной строке:
"""test that so and so happens"""
тогда вывод теста занимает более одной строки и включает в себя документ, подобный следующему:
<test name>
test that so and so happens ... ok
Я не могу найти, где это задокументированное поведение. Есть ли способ отключить это?
3 ответа
Первая строка строки документа используется; ответственный метод TestCase.shortDescription()
, который вы можете переопределить в ваших тестовых случаях:
class MyTests(unittest.TestCase):
# ....
def shortDescription(self):
return None
Всегда возвращаясь None
Вы полностью отключаете эту функцию. Если вы хотите отформатировать строку документа по-другому, она доступна как self._testMethodDoc
,
Это улучшенная версия отличного ответа MartijnPieters.
Вместо того, чтобы переопределять этот метод для каждого теста, удобнее (по крайней мере, для меня) добавить следующий файл в ваш список тестов. Назовите файл
test_[whatever you want].py
.
test_config.py
import unittest
# Hides Docstring from Verbosis mode
unittest.TestCase.shortDescription = lambda x: None
Этот фрагмент кода также можно разместить в файлах
test
папка.
В моем случае я просто добавил в корневую папку своего проекта, так как я использую обнаружение, как в
python -m unittest
из
scripts
для запуска всех юнит-тестов моего проекта. Поскольку это единственный
test*.py
файл на этом уровне каталога, он загрузится перед любым другим тестом.
(Я пробовал фрагмент на
__init__.py
корневой папки, похоже, это не сработало, поэтому я придерживался файлового подхода)
Кстати: я предпочитаю
lambda x: "\t"
вместо того
lambda x: None
Прочитав это, я сделал плагин для носовых тестов, чтобы избежать шаблонов.