Я хотел бы спросить об использовании модульного тестирования в веб-разработке. Идея Unit Testing отличная, но действительно ли она приносит пользу в контексте веб-приложения? Вторая часть моего вопроса касается TDD. Если вы создаете интеграционный тест, прежде чем фактический код может называться «Test Driven Development»?Тестирование модулей и тестирование интеграции в веб-разработке
1. Предположения
По определению Unit Test должен проверить код только на одном уровне услуг. Если тест тестирует код на нескольких уровнях, у нас есть тест интеграции.
2. Довод
2,1 Нет Алгоритмы
Есть не много алгоритмов в веб-приложении. Это не похоже на создание движка 3D Physics, где каждый метод делает что-то сложное и сложное для отладки. Веб-приложение в основном связано с интеграцией и созданием HTML.
Самые большие проблемы для веб-приложения являются: - чистый код (универсальная проблема для любого программного обеспечения, но не проверяемые) - данные консистенция - интеграция (язык программирования, файловая система, файлы конфигурации, веб-сервер, кэширование системы, База данных, поисковая система, внешние API - все эти системы должны работать вместе по запросу)
Если вы хотите построить модульный тест для каждого класса в веб-приложении, вы будете тестировать (в большинстве случаев): заполнять массивы , конкатенации строк и собственные функции языков.
2,2 Стоимость
Просто потому, что веб-приложение все об интеграции всегда есть несколько зависимостей. Вы должны издеваться над многими разными классами, и писать даже небольшой тест может быть на самом деле большой работой. Что еще хуже, это не только тест. Программное обеспечение должно быть проверено. Это означает, что нужно иметь возможность вводить зависимости почти в каждом классе. Не всегда можно вводить зависимости без создания дополнительного слоя между двумя классами (или системами). Это усложняет код и делает его более дорогостоящим.
3. Интеграция Test
Если веб-разработки все об интеграции, почему бы не проверить? Существует несколько встречных аргументов.
3,1 тест интеграции говорит «что-то сломалось», но не говорит, где
Это действительно сводится к: Сколько времени потребуется, чтобы найти ошибку, когда интеграционный тест терпит неудачу по сравнению с временем требуется для создания кода «UnitTestable» и более сложного (я думаю, это субъективно)? По моему опыту, никогда не было времени найти источник проблемы.
3.2 Вы можете запустить модульное тестирование на любых условиях, это трудно сделать с интеграционным тестом
Да, если вы хотите запустить тест интеграции без базы данных. Обычно есть база данных. До тех пор, пока вы работаете с данными об исправлении и чистят после каждого теста, это должно быть хорошо.Транзакционные базы данных идеально подходят для этой задачи. Открыть транзакцию, вставить данные, проверить, откат.
3.3 Интеграционные тесты трудно поддерживать
Я не могу комментировать это, потому что все мои испытания работают хорошо, и я никогда не имел проблем с этим.
4. Создайте хорошие модульные тесты!
Весь аргумент может быть атакован с помощью «Если вы создаете право на модульное тестирование, тогда у вас нет никаких проблем». Не может ли быть одинаковым с интеграционными тестами? Если проще создать интеграционный тест, почему бы не придерживаться его и не сделать это правильно?
Не поймите меня неправильно, я не против модульного теста. Это идеальная идея, и я рекомендую всем. Я пытаюсь понять: действительно ли это подходит для веб-разработки? Я хотел бы услышать ваши мнения и опыт.
*** «2.1 Без алгорифмов» *** - Это сильно зависит от приложения сейчас, не так ли? Просто потому, что он живет в Интернете, автоматически не означает, что он не является сложным или не содержит сложных алгоритмов. – deceze
@deceze Абсолютно! Но, вообще говоря, веб-приложение не так много из них. –
Возможно, вам стоит взглянуть на [ATDD] (http://janetgregory.blogspot.com/2010/08/atdd-vs-bdd-vs-specification-by-example.html), который в основном решает вашу проблему. [Расширение объектно-ориентированного программного обеспечения, руководствуясь тестами] (http://www.amazon.com/Growing-Object-Oriented-Software-Guided-Tests/dp/0321503627) представляет идею никогда не работать над функцией, прежде чем писать неудачный приемочный тест для него. В Pluralsight.com есть курс о Test First Development. Проверьте [часть 2] (http://pluralsight.com/training/Courses/TableOfContents/test-first-development-2) курса о ATDD. – Songo