0

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

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

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

ответ

1

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

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

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

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

+0

Разве ссылка на ссылку Kiran, которую вы опубликовали, действительна для Web API 2.0? – Elisabeth

+0

Я так считаю. См. Это - http://stackoverflow.com/a/20874162 – Badri