интеграционные тесты означают несколько вещей:
- вы настраиваете свои тестовые данные в базе данных, например, с помощью сценария.
- вы вызываете тестируемую конечную точку, точно зная, какие данные выследует позвонить с и что вы должны получить.Все это основано на ваших тестовых данных, которые вы настроили на шаге 1.
- вы сравниваете ожидаемые данные с теми, которые вы вернули.
это интеграционный тест, поскольку он затрагивает всеи API, и база данных.
Итак, вы сказали, что не можете решить, какие части контроллера проверить.Это говорит о том, что вы путаете интеграционные тесты с юнит-тестами.
Интеграционные тесты, которые мы уже рассмотрели.Модульные тесты охватывают части функциональности.Вы не тестируете контроллеры, забудьте об этом.
Что вам действительно нужно рассмотреть, так это:
Сначала отделите свой код от контроллера.Держите контроллер очень простой.Он принимает вызов, проверяет модель запроса и передает его дальше в библиотеку классов, где происходит функциональность.Это позволяет вам забыть «тестирование контроллера» и сосредоточиться на своей функциональности.Здесь помогут модульные тесты, и ваши тесты станут примерно такими:
- У меня есть пользователь, настроенный определенным образом.
- У меня есть некоторые данные, настроенные вопределенным образом
- Когда я вызываю метод X, тогда я должен получить этот ответ.
Имея такую настройку, вы можете устанавливать свои тестовые данные любым способом и проверять каждыйодин тестовый случай.
Единственная причина, по которой вы задаетесь вопросом, как вы тестируете свой контроллер, заключается в том, что вы сбросили в него весь свой код, что, конечно, усложняет задачу.Думайте SOLID, думайте SOC (Разделение проблем).
Один совет: никогда не возвращайте IQueryable из конечной точки, это не данные, это просто запрос, который еще не запущен.Верните List, IEnumerable, единственный объект, что бы вам ни понадобилось, просто убедитесь, что вы выполняете это сначала, вызывая ToList (), например, для вашего выражения IQueryable.
Итак, шаги выглядят следующим образом:
- Сначала настройте свой IQueryable
- Выполните его, вызвав ToList (), First (), FirstOrDefault (), что бы это ни былоприсвоить и вернуть результат этого.