Тест модуля контроллера должен проверить алгоритмы кода в ваших методах действий, а не на уровне данных.Это одна из причин издеваться над этими службами данных.Контроллер ожидает получить определенные значения из репозиториев / сервисов / и т. Д. И действовать по-другому, когда получает от них различную информацию.
Вы пишете модульные тесты, чтобы утверждать, что контроллер ведет себя очень специфическими способами в очень специфических сценариях / обстоятельствах.Уровень данных - это одна часть приложения, которая предоставляет эти обстоятельства для контроллера / методов действия.Утверждение, что контроллер вызвал сервисный метод, является ценным, потому что вы можете быть уверены, что контроллер получает информацию из другого места.
Проверка типа возвращаемой модели представления полезна, поскольку, если возвращается неправильный тип модели представления, MVC сгенерирует исключение времени выполнения.Вы можете предотвратить это в производственном процессе, запустив модульное тестирование.Если тест не пройден, представление может вызвать исключение в производственной среде.
Модульные тесты могут быть полезны, поскольку они значительно упрощают рефакторинг.Вы можете изменить реализацию и заявить, что поведение остается прежним, убедившись, что все модульные тесты пройдены.
Ответ на комментарий # 1
При изменении реализации вызовов тестируемого метода для изменения / удаления смоделированного метода нижнего уровня, тогдамодульный тест также должен измениться.Однако это не должно происходить так часто, как вы думаете.
Типичный рабочий процесс красно-зеленого рефактора требует написания ваших модульных тестов до написания методов, которые они тестируют.(Это означает, что ваш тестовый код не будет компилироваться в течение короткого промежутка времени, и поэтому многие молодые / неопытные разработчики испытывают трудности с принятием красно-зеленого рефакторинга.)
Если вы сначала напишите свои модульные тесты, вы будетеПриходите к точке, когда вы знаете, что контроллер должен получать информацию с нижнего уровня.Как вы можете быть уверены, что он пытается получить эту информацию?Путем моделирования метода нижнего уровня, который предоставляет информацию, и утверждения, что метод нижнего уровня вызывается контроллером.
Возможно, я ошибся, когда использовал термин «изменение реализации».Когда метод действия контроллера и соответствующий модульный тест должны быть изменены, чтобы изменить или удалить смоделированный метод, вы действительно меняете поведение контроллера.Рефакторинг по определению означает изменение реализации без изменения общего поведения и ожидаемых результатов.
Red-green-refactor - это подход обеспечения качества, который помогает предотвратить ошибки и дефекты в коде до того, как они появятся.Обычно разработчики меняют реализацию, чтобы удалить ошибки после их появления.Итак, повторюсь, случаи, о которых вы беспокоитесь, не должны происходить так часто, как вы думаете.