Модульное тестирование ASP.NET Приложения MVC3 (с NHibernate)

#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, но делайте это только там, где это действительно необходимо, потому что это не так просто, как два предыдущих типа тестов, и станет сложным в обслуживании и хрупким.

Лучше всего сохранять свой вид (пользовательский интерфейс) тонким и тестировать другие слои за пользовательским интерфейсом, поскольку тестирование пользовательского интерфейса, вероятно, не стоит всех этих хлопот.