Интеграционное тестирование с веб-API — тесты, отличные от InMemory, или тесты InMemory —

Я хотел бы провести интеграционное тестирование на своих контроллерах веб-API. Когда интеграционный тест запускается, весь конвейер запросов/ответов веб-API должен быть обработан, чтобы это был настоящий интеграционный тест.

Я прочитал несколько блогов о тестах, отличных от InMemory, или о тестах InMemory. Мне нужно знать, в чем разница и какой из этих подходов соответствует моим вышеуказанным критериям?

Я был бы очень рад некоторым пояснениям от людей, которые действительно имели дело с интеграционным тестированием на веб-API для собственного хостинга или хостинга IIS (если есть разница в тестировании...)


person Elisabeth    schedule 04.01.2014    source источник


Ответы (1)


Не знаю, что вы имеете в виду под тестированием не в памяти, но при интеграционном тестировании, включающем размещенный в памяти веб-API, запросы отправляются непосредственно в HttpServer, который в основном является первым компонентом, запускаемым в конвейере веб-API ASP.NET. Это означает, что запросы не попадают в сетевой стек. Таким образом, вам не нужно беспокоиться о запуске на определенных портах и ​​​​т. д., а также, если вы пишете большое количество тестов, время, необходимое для запуска всех ваших тестов, не будет слишком большим, поскольку вы имеете дело с памятью, а не сеть. Вы должны получить сравнимое время работы с типичным модульным тестом. Посмотрите на этот превосходный post от Kiran для получения более подробной информации о тестировании в памяти. При тестировании в памяти будут проверены все компоненты, которые вы настроили для работы в конвейере, но следует обратить внимание на форматтеры. Если вы отправляете ObjectContent в запросе, нет необходимости запускать медиаформатеры, так как запрос уже находится в десериализованном формате и, следовательно, форматирование медиа не происходит.

Если вы хотите стать ближе и хотите сократить время работы, вы можете написать свои тесты, используя собственный хост. Это то, что вы подразумеваете под тестированием не в памяти? В качестве примера можно использовать самостоятельный хостинг OWIN. Вы можете использовать API-интерфейсы хостинга Katana, размещать свой веб-API и отправлять туда свои запросы. Конечно, при этом будет использоваться настоящий HttpListener, и запросы проходят через сетевой стек, хотя все это происходит на одном компьютере. Тесты будут сравнительно медленнее, но вы, вероятно, станете намного ближе к своим рабочим прогонам.

Я лично не видел, чтобы кто-то использовал веб-хостинг и проводил много интеграционных тестов. Технически возможно запустить ваши запросы с помощью HttpClient и проверить ответ и утверждения, но у вас не будет большого контроля над организацией ваших тестов программно.

Мой выбор состоит в том, чтобы смешивать и сочетать, то есть максимально использовать тесты в памяти и использовать хост на основе Katana только для тех конкретных случаев, которые мне нужны, чтобы действительно попасть в сеть.

person Badri    schedule 05.01.2014
comment
Является ли обратная причина ссылки Kiran, которую вы разместили, все еще действительной для Web API 2.0? - person Elisabeth; 06.01.2014