Не знаю, что вы имеете в виду под тестированием не в памяти, но при интеграционном тестировании, включающем размещенный в памяти веб-API, запросы отправляются непосредственно в HttpServer
, который в основном является первым компонентом, запускаемым в конвейере веб-API ASP.NET. Это означает, что запросы не попадают в сетевой стек. Таким образом, вам не нужно беспокоиться о запуске на определенных портах и т. д., а также, если вы пишете большое количество тестов, время, необходимое для запуска всех ваших тестов, не будет слишком большим, поскольку вы имеете дело с памятью, а не сеть. Вы должны получить сравнимое время работы с типичным модульным тестом. Посмотрите на этот превосходный post от Kiran для получения более подробной информации о тестировании в памяти. При тестировании в памяти будут проверены все компоненты, которые вы настроили для работы в конвейере, но следует обратить внимание на форматтеры. Если вы отправляете ObjectContent
в запросе, нет необходимости запускать медиаформатеры, так как запрос уже находится в десериализованном формате и, следовательно, форматирование медиа не происходит.
Если вы хотите стать ближе и хотите сократить время работы, вы можете написать свои тесты, используя собственный хост. Это то, что вы подразумеваете под тестированием не в памяти? В качестве примера можно использовать самостоятельный хостинг OWIN. Вы можете использовать API-интерфейсы хостинга Katana, размещать свой веб-API и отправлять туда свои запросы. Конечно, при этом будет использоваться настоящий HttpListener, и запросы проходят через сетевой стек, хотя все это происходит на одном компьютере. Тесты будут сравнительно медленнее, но вы, вероятно, станете намного ближе к своим рабочим прогонам.
Я лично не видел, чтобы кто-то использовал веб-хостинг и проводил много интеграционных тестов. Технически возможно запустить ваши запросы с помощью HttpClient
и проверить ответ и утверждения, но у вас не будет большого контроля над организацией ваших тестов программно.
Мой выбор состоит в том, чтобы смешивать и сочетать, то есть максимально использовать тесты в памяти и использовать хост на основе Katana только для тех конкретных случаев, которые мне нужны, чтобы действительно попасть в сеть.
person
Badri
schedule
05.01.2014