Python: Есть ли в unittest что-то, чего нет в doctest? - PullRequest
0 голосов
/ 02 апреля 2011

Вопрос совершенно ясен, ... заметьте, однако, что я НЕ спрашиваю о сравнении характеристик (их уже много), и при этом я не спрашиваю, какой из них вы предпочитаете!

У меня есть явное предпочтение для проведения докут-тестов, я использую их для всего, даже если они не предназначены для документации. Но вот что мне интересно: есть ли что-нибудь, что вы можете сделать с юнитами, что вы не можете сделать с документами ???

Ответы [ 4 ]

5 голосов
/ 02 апреля 2011

Существует распространенное заблуждение, что doctest предназначен для тестирования вашего кода.doctest предназначен для тестирования вашей документации .doctest предназначен для проверки того, что ваша документация соответствует тому, что фактически делает функция / класс / модуль, и предупреждает вас, если пример кода в вашей документации устареет по мере развития модуля.

Хотя doctest может выявить ошибки в коде, это не является его основной целью (например, изменение кода может привести к обнаружению ошибок в коде тестового набора юнит-теста, но тестирование кода тестового набора не является основной целью unitetest)

, даже если это не такиспользуется для документации

строка документации автоматически извлекается функцией help (), чтобы стать документацией для вашей функции / класса / модуля;Вы не можете сделать документацию, а не документацию.Пользователи вашего модуля / функции / класса (или вы через несколько дней) могут попытаться выполнить help () для вашей функции / класса / модуля и получить сюрприз, что документация представляет собой набор кодов.

2 голосов
/ 02 апреля 2011

Есть несколько тестовых сценариев, которые просто не очень хорошо освещают.Это нормально, поскольку, как указал Ли, doctests не предназначена для того, чтобы быть комплексным решением для тестирования - они призваны гарантировать, что простые примеры стилей интерактивных подсказок в вашей документации (включая строки документации) не устаревают.

Написание реальных модульных тестов, с другой стороны, позволяет вам раскрыть все возможности Python при принятии решения о том, как составить ваш набор тестов (например, использование наследования для совместного использования не только операций установки и завершения теста, но ифактические методы тестирования).

doctests может быть частью этого, но они не являются полным решением для тестирования (за исключением небольших, относительно автономных операций).

Вероятно, стоит посмотретьСобственный набор тестов Python (пакет test) и ознакомление с некоторыми из тестов.В то время как докуты играют свою роль, большая часть написана с использованием unittest.

0 голосов
/ 02 апреля 2011

Некоторым тестам понадобятся такие вещи, как базы данных, настроенные и инициализированные.

Это может сделать тестирование документов:

  • очень подробным (и, следовательно, плохой документацией);и
  • , вероятно, неэффективно , потому что при тестировании документов вы обычно настраиваете базу данных для каждой функции или класса.Для сравнения, модульные тесты легче использовать одну и ту же базу данных для тестирования многих функций или классов.
0 голосов
/ 02 апреля 2011

Doctests ограничены для тестирования функции (или для класса). Вы не можете делать такие вещи, как получение выходных данных одной функции, пробование ее с другой и т. Д. Лучше всего ее использовать для тестов типа «пример» (т.е. как я могу использовать эту функцию?)

Модульные тесты могут быть более масштабными и более сложными, чем тесты.

...