Mock HttpClient с несколькими запросамиC#

Место общения программистов C#
Anonymous
Mock HttpClient с несколькими запросами

Сообщение Anonymous »


Я пытаюсь выполнить модульное тестирование функции, которая вызывает API. Я успешно сделал это, используя макет HttpMessageHandler, как показано ниже, который позволяет мне подделать ответ от API:

private static Mock GetMockHttpMessageHandler(stringockResponse) { варockMessageHandler = новый Mock(); макетMessageHandler.Protected() .Setup("SendAsync", ItExpr.IsAny(), ItExpr.IsAny()) .Returns(Task.FromResult(новый HttpResponseMessage { СтатусКод = HttpStatusCode.OK, Содержимое = новый StringContent (mockResponse) })); вернуть макетMessageHandler; } Пока все хорошо. Мне удалось протестировать половину моей функции, вторая половина выполняет еще один вызов API — оба ответа затем оборачиваются в объект, используемый системой. Проблема в том, что у второго API должен быть другой ложный ответ.

Я думал, что смогу изменить ItExpr.IsAny() в приведенном выше коде на new HttpRequestMessage(HttpMethod.Post, "http://LiveUrl.com /AuthenticateUserCredential"), а затем иметь несколько Setup/Returns с изменением ответа на основе URI, но я попробовал это, как показано ниже (только с одним Setup/Return > для проверки я не сломал первую половину теста)

private static Mock GetMockHttpMessageHandler(stringockResponse) { варockMessageHandler = новый Mock(); макетMessageHandler.Protected() .Setup("SendAsync", new HttpRequestMessage(HttpMethod.Post, "http://LiveUrl.com/AuthenticateUserCredential"), ItExpr.IsAny()) .Returns(Task.FromResult(новый HttpResponseMessage { СтатусКод = HttpStatusCode.OK, Содержимое = новый StringContent (mockResponse) })); вернуть макетMessageHandler; } Теперь приведенное выше прерывает первый вызов API — я получаю ответ ниже:

обработчик не вернул ответное сообщение

Теперь я застрял. Возможно ли вообще то, что я пытаюсь сделать?

Вернуться в «C#»