Тестирование блока контроллера MVC4
Я использую Ninject для IOC и отдельные репозитории для каждой модели.
Я собираюсь написать некоторые модульные тесты для контроллера, но я не хочу интеграционные тесты - я уже сделал это - я не хочу касаться БД.
У меня есть два варианта
- Используйте Moq, подготовьте все настройки и возвраты для объектов moq
- Используйте мои уже существующие интерфейсы и Ninject для создания собственных репозиториев в памяти, которые не будут касаться БД, но будут возвращать простые списки.
Какой подход будет более правильным с теоретической точки зрения?
Для меня второй вариант звучит лучше, потому что он собирается проверить весь путь: UnitTest -> Controller(myMockRepository) -> Controller.AddItem() -> myMockRepository.AddItem() и, следовательно, протестировать фактическую архитектуру приложения.
Или, может быть, эти два варианта одинаковы, и я пытаюсь усложнить простые вещи?
1 ответ
Инжекция импровизированной реализации в контроллер обычно обеспечивает большую гибкость и контроль над данными, которые необходимо вернуть из макета. В модульном тесте обычно не следует использовать какую-либо инфраструктуру внедрения зависимостей. Модульный тест - это то, что позволяет вам проверить функциональность какого-либо метода в полной ИЗОЛЯЦИИ.
Лично я бы использовал фальшивый фреймворк, а затем внедрил в контроллер импровизированную реализацию репозитория.
При этом, в зависимости от реализации, которую вы пытаетесь смоделировать, некоторые люди просто не утруждают себя насмешкой над своим DAL. DAL позволяет заменить фактическую базу данных представлением данных в памяти. Но без необходимости писать все методы самостоятельно для теста.