Пропустить до содержимого

Как использовать python -m doctest?

[

python -m doctest: Туториал по использованию doctest в Python

Doctest - это инструмент для тестирования Python кода, который позволяет проверять примеры кода, указанные в docstring. В этом туториале мы рассмотрим, как использовать doctest для тестирования функций в Python.

Установка doctest

Doctest является встроенным модулем в Python, поэтому дополнительная установка не требуется.

Пример использования doctest

Рассмотрим следующую функцию sum_counters:

def sum_counters(counters):
"""
Суммирует несколько объектов Counter и возвращает результат.
>>> c1 = Counter({'a': 1, 'b': 2})
>>> c2 = Counter({'b': 3, 'c': 4})
>>> sum_counters([c1, c2])
Counter({'b': 5, 'c': 4, 'a': 1})
"""
result = Counter()
for counter in counters:
result += counter
return result

Давайте разберем, какие шаги нужно выполнить, чтобы протестировать эту функцию с помощью doctest.

  1. Завершите входной код примера в docstring для sum_counters. Например:
>>> c1 = Counter({'a': 1, 'b': 2})
>>> c2 = Counter({'b': 3, 'c': 4})
>>> sum_counters([c1, c2])
  1. Завершите пример docstring, указав ожидаемый вывод. Например:
Counter({'b': 5, 'c': 4, 'a': 1})
  1. Запустите функцию testmod из модуля doctest, чтобы протестировать примерный код функции. Например:
import doctest
doctest.testmod()

Полный пример использования doctest

from collections import Counter
import doctest
def sum_counters(counters):
"""
Суммирует несколько объектов Counter и возвращает результат.
>>> c1 = Counter({'a': 1, 'b': 2})
>>> c2 = Counter({'b': 3, 'c': 4})
>>> sum_counters([c1, c2])
Counter({'b': 5, 'c': 4, 'a': 1})
"""
result = Counter()
for counter in counters:
result += counter
return result
if __name__ == '__main__':
doctest.testmod()

Запустив этот код, вы увидите, что doctest выполнил проверку примерного кода в docstring и вывел информацию о том, сколько тестов было пройдено и сколько тестов не удалось пройти.

**********************************************************************
File "example.py", line 9, in __main__.sum_counters
Failed example:
sum_counters([c1, c2])
Expected:
Counter({'b': 5, 'c': 4, 'a': 1})
Got:
Counter({'a': 1, 'c': 4, 'b': 5})
**********************************************************************
1 items had failures:
1 of 1 in __main__.sum_counters
***Test Failed*** 1 failures.

Вы видите, что один тест не прошел. В этом случае вы можете исправить код функции sum_counters, чтобы пройти тест, а затем запустить doctest снова.

Заключение

Doctest - это мощный инструмент для тестирования Python кода, особенно когда вы пишете хорошо документированный код с примерами в docstring. Он позволяет вам тестировать функциональность вашего кода, а также предоставляет примеры использования для других разработчиков.