После нескольких лет написания кода и работы над проектами я дам ответ на свой вопрос.
Да, вы должны написать модульные тесты. Сквозные тесты сложнее в написании и ломкости, особенно если они полагаются на компоненты пользовательского интерфейса.
Если вы используете фреймворк, такой как Django или Rails (или ваши собственные пользовательские классы), у вас должен быть класс формы, который будет обрабатывать проверку формы. У вас также будут классы представления, которые отображают визуализированные шаблоны, а также формы и обрабатывают запросы GET и POST.
В конце теста вы бы:
- получить URL
- заполните форму с действительными данными
- разместить форму на URL
- проверьте, чтобы база данных была обновлена или какое-либо действие было выполнено в результате правильной формы
Вы тестируете много кода, и ваш охват будет довольно хорошим, но вы тестируете счастливый путь только тогда, когда все идет хорошо. Как вы обеспечиваете правильность проверки формы? Что если эта форма используется на нескольких страницах? Вы пишете еще один конец в конец теста?
Давайте попробуем это снова с юнит-тестами:
- проверить метод GET view
- проверить метод POST вида с фальшивой / фиктивной формой
- проверить форму с правильными данными
- проверить форму с неверными данными
- проверить побочные эффекты формы
Используя модульные тесты, вы тестируете меньшие фрагменты кода, и эти тесты специфичны и их легче писать. Когда вы комбинируете это с TDD (Test Driven Development), вы получаете код более высокого качества.
Легкость написания юнит-тестов не следует сбрасывать со счетов, потому что, когда вы находитесь в проекте, в котором нет автоматического тестирования, вам нужно с чего-то начинать. Начать с модульных тестов проще и быстрее, и вы сразу же сможете начать тестирование на наличие ошибок, а не только на успешный путь.
was told by a co-worker that the reason for this is that we can rip out and change the underlying implementation at any point as long as the end-to-end tests pass.
- Это также верно для юнит-тестов. Мне кажется, что сквозные тесты используются как оправдание для того, чтобы не писать модульные тесты.