#django #unit-testing #tdd
#django #модульное тестирование #tdd
Вопрос:
Я новичок как в Django, так и в модульном тестировании, но, поскольку я начинаю проект после достаточно долгого времени, играя с фреймворком, я решил попробовать модульное тестирование.
Если отбросить мой энтузиазм, я совершенно не понимаю, как планировать процесс разработки. Я немного поискал в github проекты Django, использующие модульное тестирование, и наткнулся на это. Я вижу, что есть только тесты для приложения «пометки», и оно выглядит хорошо, но я понятия не имею, как его разбить. Почему «models.py » файл в приложениях / тегах / тестах /? Классы моделей там не имеют ничего общего с классами в apps/tagging/models.py …
Есть идеи о том, как это выяснить, или найти хороший пример того, как внедрить модульное тестирование в среду django?
Кроме того, я прочитал в документах, что Django представил unittest2 в 1.3, так что «Тестирование и отладка Django 1.1 — by Karen M. Tracey» будет полезным чтением или вы думаете, что это может вызвать некоторую путаницу?
В любом случае, я заранее признателен за любой вклад.
Ответ №1:
Если я могу подключить свой собственный учебник, в нем рассказывается, как сделать TDD в Django с нуля. Я описываю те же шаги, что и в «официальном» руководстве по Django, за исключением использования TDD на каждом этапе. Это включает в себя полное тестирование автоматизации браузера с помощью Selenium (что позволяет вам тестировать поведение с точки зрения конечного пользователя, включая возможность последующего включения javascript). Я также показываю, как использовать тестовый клиент Django для модульного тестирования…
Комментарии:
1. Я думаю, что я наткнулся на этот проект (приложение django poll все тесты) в github sme некоторое время назад. Я не знал, что это тоже пошагово… Спасибо, приятель. Прошло некоторое время, но я посмотрю на это.
2. посмотрим, как у вас получится! Я попытался написать его так, чтобы он не предполагал никаких знаний, и действительно идет шаг за шагом… Комментарии приветствуются!
3. Я читаю это прямо сейчас … даже не знал, что функциональные тесты могут быть автоматизированы. Я слышал о Selenium, но я никогда не читал, что такое fuzz. Пока выглядит отлично. Однако у меня есть вопрос…. как часто вы фиксируете свой код во время модульного тестирования? Я прохожу этап создания модели опроса, … и, казалось бы, это было бы слишком, если бы я написал тест, запустил его, добавил поле, зафиксировал, запустил тест, добавил другое поле, зафиксировал, запустил тест и т.д… каков темп внесения изменений в ваш код?
4. хороший вопрос… Мне было интересно, должен ли я в какой-то момент обратиться к VCS. Мой шаблон, как правило, таков: первый черновик FT получает фиксацию. Затем вы могли бы выполнять отдельные коммиты для каждого модульного теста и связанных с ним изменений кода, но это, вероятно, излишне. Я бы сказал, например, при создании новой модели напишите модульные тесты, выполните их все, а затем зафиксируйте тесты и класс рабочей модели вместе… идея состоит в том, чтобы сделать ваши коммиты достаточно детализированными, чтобы позже было легко отменить изменения…
5. Я думаю, что хорошо фиксировать после каждого каждого из наименьших последовательных, самосогласованных рабочих изменений. Например, измените FT, добавьте новый модульный тест, измените несколько строк кода продукта, затем зафиксируйте. Все тесты должны проходить при фиксации, всегда. Иногда коммит — это просто рефакторинг кода продукта без каких-либо изменений в тесте. Иногда коммиты состоят всего из нескольких строк — может быть, только из одной. Отделите ваши коммиты «внедрение новой функциональности» от ваших коммитов «рефакторинга с сохранением поведения». Отделите свои коммиты «пробелы и комментарии».
Ответ №2:
Django отлично справляется с началом работы. Они описывают, что следует и чего не следует тестировать, и как использовать некоторые из их встроенных тестовых классов. https://docs.djangoproject.com/en/dev/topics/testing /
Кроме того, я бы порекомендовал django-nose
test runner. В нем много отличных плагинов.
Я думаю, что общее соглашение заключается в том, чтобы иметь tests.py файл в каждом приложении.
Я лично напишу как минимум 1 тест для каждой функции, которую я создаю. Больше зависит от того, насколько сложна логика. По мере разработки приложения эти тесты превращаются в регрессионные тесты для моего проекта.
Комментарии:
1. Есть ли у вас или знаете ли вы какие-либо хорошие примеры проектов, чтобы я мог проверить тесты для различных частей приложения (формы, представления, URL-адреса, модели, сеансы и т. Д.)? Это было бы действительно полезно. Кроме того, в чем смысл django-носа? какие плагины вы используете с ним?