如何对自定义DelegatingHandler进行单元测试?我有以下内容,但它抱怨innerHandler没有设置。
var httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, "http://foo.com");
var handler = new FooHandler()
{
InnerHandler = new FooHandler()
};
var invoker = new HttpMessageInvoker(handler);
var result = await invoker.SendAsync(httpRequestMessage, new CancellationToken());
Assert.That(result.Headers.GetValues("some-header").First(), Is.Not.Empty, "");发布于 2016-05-13 20:53:57
您可以使用虚拟/假处理程序( InnerHandler )设置要测试的DelegatingHandler (FooHandler)的FooHandler属性,如注释中的联系员额所示。
public class TestHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
return Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK));
}
}
// in your test class method
var httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, "https://example.com/");
var handler = new FooHandler()
{
InnerHandler = new TestHandler() // <-- change to use this
};
var invoker = new HttpMessageInvoker(handler);
var result = await invoker.SendAsync(httpRequestMessage, new CancellationToken());
Assert.That(result.Headers.GetValues("some-header").First(), Is.Not.Empty, "");不像那篇文章,这应该是您需要设置的最低限度,以使您的测试运行。
发布于 2021-01-05 12:49:23
使用using Moq.Protected;,您可以获得对响应结果的更多控制。
var request = new HttpRequestMessage();
var innerHandlerMock = new Mock<DelegatingHandler>(MockBehavior.Strict);
innerHandlerMock
.Protected()
.Setup<Task<HttpResponseMessage>>("SendAsync", request, ItExpr.IsAny<CancellationToken>())
.ReturnsAsync(new HttpResponseMessage(HttpStatusCode.OK));
var handler = new FooHandler()
{
InnerHandler = innerHandlerMock.Object
};
var invoker = new HttpMessageInvoker(handler);
// act
await invoker.SendAsync(request, default);发布于 2017-09-14 09:39:13
例如使用System.Net.Http.HttpClientHandler或System.Web.Http.HttpServer作为InnerHandler:
var handler = new FooHandler()
{
InnerHandler = new System.Net.Http.HttpClientHandler()
};或
var handler = new FooHandler()
{
InnerHandler = new System.Web.Http.HttpServer()
};https://stackoverflow.com/questions/31650718
复制相似问题