Работа с модулем doctest

Модуль doctest позволяет писать тесты прямо в комментариях. Строчки комментариев, начинающиеся с '>>>' будут выполняются и возвращаемый результат будет сравниваться со значением, написанным в следующей строчке. Обратите внимание, что после '>>>' должен следовать ровно один пробел. Для вызова непосредственно из программы мы должны импортировать библиотеку doctest и вызвать метод doctest.testmod(). Рекомендуется указывать в параметрах verbose=True, чтобы получить развернутый вывод в консоль информации о прошедшем тестировании.

doctest_example_1.py

# -*- 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"), которому в параметре передать имя файла с тестами. В самом файле тестов нужно импортировать модуль(и) к которым у нас относятся тесты.

doctest_example_2.py

# -*- 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
 
    '''

Небольшие сложности возникают, когда мы используем:

  1. Словари (dict)
  2. Числа с плавающей точкой (float)
  3. Идентификаторы (id)
  4. Вывод об ошибках ()

Если совсем кратко описать решение выше перечисленных проблем, то это:

  1. сортировка словаря перед выводом
  2. округления числа с фиксированной точностью перед выводом
  3. не использовать в тестах вывод идентификаторов (id)
  4. использовать директиву #doctest: ELLIPSYS

Ссылки по данной теме:

  1.     - Оригинальная документация по модулю. 
  2.   Перевод  - оригинальной документация по модулю на русский. 
  3. Обучающее видео от pluralsight.com
  4. Обучающее видео от pluralsight.com
  5. Д.Бизли. Питон. Подробный справочник. 4 издание. 2010 г. стр.236-239