Как остановить 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

Прочитав это, я сделал плагин для носовых тестов, чтобы избежать шаблонов.

https://github.com/MarechJ/nosenodocstrings

Другие вопросы по тегам