Помимо классических тестов, в Python встроено тестирование через документацию. Это довольно необычный способ писать тесты, который иногда применяют для библиотечных функций. В этом уроке мы изучим эту тему подробнее и разберемся, как выглядит такая документация.
Как работает тестирование через документацию
Идея довольно проста. Внутри терминала вызывается функция. Сам вызов и полученный в результате вывод — это и есть тест. Далее он добавляется в документацию функции:
# Внутри example.py определена функция reverse(), которая переворачивает строку
# Флаг -i переключает в интерактивный режим (REPL) после выполнения модуля
python -i example.py
reverse('')
# ''
reverse('Hexlet')
# 'telxeH'
Сделав нужные вызовы, мы просто добавляем их в описание функции:
def reverse(string):
"""Reverse string
>>> reverse('')
''
>>> reverse('Hexlet')
'telxeH'
"""
return string[::-1]
# Нужно для запуска тестов
if __name__ == "__main__":
import doctest
doctest.testmod()
Если передать этот файл в интерпретатор, то мы увидим отчет о выполненных тестах:
# Для полного вывода нужно добавить флаг -v (verbose)
python example.py -v
Trying:
reverse('')
Expecting:
''
ok
Trying:
reverse('Hexlet')
Expecting:
'telxeH'
ok
1 items had no tests:
__main__
1 items passed all tests:
2 tests in __main__.reverse
2 tests in 2 items.
2 passed and 0 failed.
Test passed.
Вот так документация может одновременно выполнять роль тестов. Это достаточно удобно и практично. То же самое можно делать не только на уровне конкретной функции, но и на уровне всего модуля:
"""
This is the "example" module.
The example module supplies one function, reverse(). For example,
>>> reverse('awesome!')
'!emosewa'
"""
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.