В большинстве случаев это был очень плавный переход, но когда дело доходит до имитации HttpMessageHandler (SendAsync), существует довольно удобный способ перейти к частному методу moq.
(предыдущий пример для минимального заказа для настройки возврата с выражениями аргументов)
Код: Выделить всё
protected void SetupHandler(Expression match, HttpStatusCode httpStatusCode,
T body)
{
SetupHandlerStringResponse(match, httpStatusCode, JsonConvert.SerializeObject(
body), "application/json");
}
protected void SetupHandlerStringResponse(Expression match, HttpStatusCode httpStatusCode,
string body, string contentType)
{
MockHttpMessageHandler.Protected()
.Setup("SendAsync", ItExpr.Is(match), ItExpr.IsAny())
.ReturnsAsync(new HttpResponseMessage
{
StatusCode = httpStatusCode,
Content = new StringContent(body, Encoding.UTF8, contentType)
});
}
protected void VerifyHandler(Expression match, Times times)
{
MockHttpMessageHandler.Protected().Verify("SendAsync", times, ItExpr.Is(match), ItExpr.IsAny());
}
Код: Выделить всё
SetupHandler(t => t.Method == HttpMethod.Get, HttpStatusCode.OK, lookup);
var response = await Class.DoSomething();
Assert.NotNull(response);
VerifyHandler(t => t.Method == HttpMethod.Get && t.RequestUri.PathAndQuery == $"/api/endpointName", Times.Once());
Я нашел в Интернете множество статей о подобных проблемах, и всегда кажется, что с параметрами возникают какие-то проблемы. Я несколько раз видел этот подход для замены этого «Защищенного» метода доступа.
Похоже, что этот способ будет работать, если не было параметров ИЛИ не требовалась проверка параметров.
Но в моем случае это бесполезно для меня, если я не могу использовать выражения Arg.Is для проверки входных данных и при этом имитировать выходные данные для HttpMessageHandler.
Любой Помощь/идеи будут признательны.
Подробнее здесь: https://stackoverflow.com/questions/783 ... ed-methods
Мобильная версия