По мере роста вашего проекта вы обнаружите, что юнит-тесты гораздо лучше подходят для тестирования вашего кода.
Сам проект Django находится в процессе преобразования всех тестов в юнит-тесты (мы будем выполнять1.3 выпуск).Причина, по которой мы это делаем, заключается в том, что до этого преобразования порядок выполнения в тестовом наборе иногда приводил к трудным воспроизведению ошибок.Иногда немного кода случайно зависел от ранее выполненного кода doctest.Кроме того, переключение на юнит-тесты ускоряет общее время тестирования, поскольку мы можем быть более осмотрительными в отношении того, как и когда мы очищаем базу данных.
Другое преимущество юнит-тестов состоит в том, что их НАМНОГО проще поддерживать.Поскольку весь тестовый набор является автономным, вы либо пишете другой тестовый пример, либо модифицируете небольшую целевую тестовую функцию, чтобы она подходила.
Doctests, как правило, работает по эволюции - вы получаете экземпляр своего виджета, добавляете зеленый мех, убедитесь, что мех зеленый, добавьте 4 ноги, убедитесь, что у вас 4 ноги и зеленый мех, добавьте большой палец,убедитесь, что у вас большой палец, 4 ноги, зеленый мех и т. д. Это означает, что если вы хотите добавить тест сразу после этапа зеленого меха, вам придется изменить ожидаемые результаты для каждого последующего теста.
Вы не хотите делать все это переписывание, поэтому вы добавляете новый тест в конце.Затем вы добавляете еще один, и через некоторое время ваши тесты настолько безнадежно перемешиваются, что вы не можете понять, тестируется ли конкретная функция или нет!С юнит-тестами, поскольку каждый тест воплощает определенную, конкретную и ограниченную идею, намного проще переупорядочить тесты логически и добавить новый тест, который не зависит от всех предыдущих.Кроме того, если вы измените способ работы add_green_fur()
, вам не нужно изменять десятки результатов тестовых примеров.
Другое преимущество состоит в том, что юнит-тесты (если они написаны хорошо) точно сообщают вам, где произошел сбой вашего кода.Failed: MyWidget.tests.test_green_fur()
намного проще отладить, чем «проверка виджета не удалась в строке 384», которая часто находится на расстоянии от десятков до сотен строк от фактической точки отказа.
В общем, тесты юнитов - лучший способtest.
Редактировать:
В ответ на идею вашего коллеги, я с уважением предполагаю, что он не работал над большим проектом со многими тестами.Доктесты в моделях такие же плохие, как и во взглядах.У них точно такие же проблемы (хотя, если что, тестирование хуже в моделях, потому что flush
очень дорого и абсолютно необходимо для тщательного тестирования). Не стоит недооценивать стоимость времени, затрачиваемого на выполнение тестов.
Кроме того, не смешивайте типы тестов, если у вас нет ОЧЕНЬ веских причин для этого.Если вы это сделаете, вы очень быстро удвоите количество тестов или предположите, что функция тестируется в том наборе тестов, который вам не нужен.
Документы часто называют "предоставлением документации"."за то, как ваш код должен работать.Это хорошо, но это не замена написания читабельного кода с хорошо читаемыми встроенными комментариями.Если вам нужна дополнительная документация, напишите ее отдельно!
Вы не можете написать хорошие тесты, которые также функционируют как хорошая документация.