#unit-testing #asp.net-mvc-3 #architecture
#модульное тестирование #asp.net-mvc-3 #архитектура
Вопрос:
Я только запускаю свое первое приложение MVC3, и я не уверен, как его модульно протестировать. Я планировал выделить вспомогательные классы (обычно статические помощники) в отдельную сборку, а также классы моделей, чтобы я мог протестировать их с помощью NUnit.
Итак, я согласен с вспомогательными классами; но как мне протестировать классы моделей (учитывая, что они аннотированы для NHibernate и привязаны к базе данных), и как я могу протестировать свои представления и контроллеры?
Какие конкретные инструменты и методы мне нужны для тестирования моделей, привязанных к NHibernate, а также ASP.NET представления и контроллеры? Я не уверен. NUnit решает только часть проблемы.
Редактировать: Вот несколько примеров кода — я сейчас не на своем компьютере разработчика, поэтому у меня нет реального кода для демонстрации.
- Модели: Что-нибудь из документации ActiveRecord
- Контроллеры: стандартный HomeController из документации MVC3
- Число просмотров:Любое строго типизированное представление (скажем, Create), созданное из контекстного меню, вызываемого правой кнопкой мыши (Добавить> Просмотр)
Конкретные вопросы:
- Как я могу протестировать модели сохранения без фактического сохранения в основной / производственной базе данных
- Область для тестирования представлений; должен ли я просто проверять наличие полей? Как насчет сообщений об ошибках проверки?
- Контроллеры: область для тестирования. Должен ли я проверить, что действия касаются и деформируют данные базы данных, как ожидалось (например, / get /id получает этот объект; / delete / id удаляет этот объект)?
Комментарии:
1. Покажите пример кода, который вы хотели бы модульно протестировать. В настоящее время на ваш вопрос сложно ответить.
2. У меня нет ничего сложного (и у меня нет ASP.NET MVC3 на этом компьютере), поэтому я ссылался на ссылки. Начальный код — это почти то, что у меня есть (ActiveRecord / NHibernate для моделей, стандартный ASP.NET Представления и контроллеры MVC3).
Ответ №1:
Вы можете достичь этого с помощью различных видов тестов, но вам нужно применять их с умом в зависимости от того, что вы собираетесь тестировать:
-
Используйте модульный тест для тестирования ваших контроллеров или вашей бизнес-логики, не обращаясь к базе данных.
-
Используйте интеграционное тестирование, запустив базу данных в памяти (которую поддерживает NHibernate и которую легко настроить). Вы можете убедиться, что сценарий действительно работает, например, используя допустимый сценарий, вся бизнес-логика работает, ваш контроллер передает данные в механизм сохранения, и они правильно поступают в базу данных.
-
Вы можете использовать тестирование пользовательского интерфейса с использованием таких фреймворков, как Selenium, но делайте это только там, где это действительно необходимо, потому что это не так просто, как два предыдущих типа тестов, и станет сложным в обслуживании и хрупким.
Лучше всего сохранять свой вид (пользовательский интерфейс) тонким и тестировать другие слои за пользовательским интерфейсом, поскольку тестирование пользовательского интерфейса, вероятно, не стоит всех этих хлопот.