Модуль doctest позволяет писать тесты прямо в комментариях. Строчки комментариев, начинающиеся с '>>>' будут выполняются и возвращаемый результат будет сравниваться со значением, написанным в следующей строчке. Обратите внимание, что после '>>>' должен следовать ровно один пробел. Для вызова непосредственно из программы мы должны импортировать библиотеку doctest и вызвать метод doctest.testmod(). Рекомендуется указывать в параметрах verbose=True, чтобы получить развернутый вывод в консоль информации о прошедшем тестировании.
# -*- coding: utf-8 -*-
# файл doctest_example_1.py
def simple(a):
'''
>>> simple(4)
15
'''
return a*a-1
if __name__ == "__main__":
import doctest
doctest.testmod(verbose=True)
Возможно помещать тесты в отдельный файл. Тогда для его вызова нужно использовать метод doctest.testfile("doctest.txt"), которому в параметре передать имя файла с тестами. В самом файле тестов нужно импортировать модуль(и) к которым у нас относятся тесты.
# -*- coding: utf-8 -*-
# файл doctest_example_2.py
def simple(a):
return a*a-1
if __name__ == "__main__":
import doctest
doctest.testfile("doctest.txt")
Для файла doctest_example_2.py файл с тестами может быть такой
'''
файл doctest.txt
>>> from doctest_example1 import simple
>>> simple(4)
15
'''
Небольшие сложности возникают, когда мы используем:
- Словари (dict)
- Числа с плавающей точкой (float)
- Идентификаторы (id)
- Вывод об ошибках ()
Если совсем кратко описать решение выше перечисленных проблем, то это:
- сортировка словаря перед выводом
- округления числа с фиксированной точностью перед выводом
- не использовать в тестах вывод идентификаторов (id)
- использовать директиву #doctest: ELLIPSYS
Ссылки по данной теме:
- - Оригинальная документация по модулю.
- Перевод - оригинальной документация по модулю на русский.
- Обучающее видео от pluralsight.com
- Обучающее видео от pluralsight.com
- Д.Бизли. Питон. Подробный справочник. 4 издание. 2010 г. стр.236-239