Тестирование блока контроллера MVC4

Я использую Ninject для IOC и отдельные репозитории для каждой модели.

Я собираюсь написать некоторые модульные тесты для контроллера, но я не хочу интеграционные тесты - я уже сделал это - я не хочу касаться БД.

У меня есть два варианта

  1. Используйте Moq, подготовьте все настройки и возвраты для объектов moq
  2. Используйте мои уже существующие интерфейсы и Ninject для создания собственных репозиториев в памяти, которые не будут касаться БД, но будут возвращать простые списки.

Какой подход будет более правильным с теоретической точки зрения?

Для меня второй вариант звучит лучше, потому что он собирается проверить весь путь: UnitTest -> Controller(myMockRepository) -> Controller.AddItem() -> myMockRepository.AddItem() и, следовательно, протестировать фактическую архитектуру приложения.

Или, может быть, эти два варианта одинаковы, и я пытаюсь усложнить простые вещи?

1 ответ

Решение

Инжекция импровизированной реализации в контроллер обычно обеспечивает большую гибкость и контроль над данными, которые необходимо вернуть из макета. В модульном тесте обычно не следует использовать какую-либо инфраструктуру внедрения зависимостей. Модульный тест - это то, что позволяет вам проверить функциональность какого-либо метода в полной ИЗОЛЯЦИИ.

Лично я бы использовал фальшивый фреймворк, а затем внедрил в контроллер импровизированную реализацию репозитория.

При этом, в зависимости от реализации, которую вы пытаетесь смоделировать, некоторые люди просто не утруждают себя насмешкой над своим DAL. DAL позволяет заменить фактическую базу данных представлением данных в памяти. Но без необходимости писать все методы самостоятельно для теста.

Другие вопросы по тегам