我正在尝试在C#中的VS 2017中测试适配器服务。我的测试失败,因为它需要HTTPClient的400至499响应。当我的测试运行时,服务返回500。

因此,搜索后我发现了MockHttpClient nuget包,但是当我在测试中尝试它们时,给出的示例不起作用。

例:
https://github.com/codecutout/MockHttpClient/blob/master/README.md

我说错了


  'MockHttpClient'是一个命名空间,但使用起来就像一种类型


我还在测试顶部添加了using MockHTTPClient

我究竟做错了什么?

与下面的错误

var mockHttpClient = new MockHttpClient();
mockHttpClient.When("the url I am using").Returns(HttpStatusCode.Forbidden)

最佳答案

这是与名称空间的名称冲突。类和名称空间共享相同的名称。

删除using语句,并使用此语句:

var mockHttpClient = new MockHttpClient.MockHttpClient();


该库的名称选择不当,并且依赖程度惊人。如果我是你,我会远离的。

更新:

您要求替代方案,所以这是我最近为一个项目所做的工作:

HttpClient类具有一个接受HttpMessageHandler对象的构造函数,因此您可以传递自己的处理程序并模拟行为。

创建一个从DelegatingHandler派生并覆盖发送行为的类:

public class TestHandler : DelegatingHandler
{
    private Func<HttpRequestMessage, CancellationToken, Task<HttpResponseMessage>> _handler;

    public TestHandler(Func<HttpRequestMessage, CancellationToken, Task<HttpResponseMessage>> handler)
    {
        _handler = handler;
    }

    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        return _handler(request, cancellationToken);
    }

    public static Task<HttpResponseMessage> OK()
    {
        return Task.Factory.StartNew(() => new HttpResponseMessage(HttpStatusCode.OK));
    }

    public static Task<HttpResponseMessage> BadRequest()
    {
        return Task.Factory.StartNew(() => new HttpResponseMessage(HttpStatusCode.BadRequest));
    }
}


然后在测试中,在构造函数中使用处理程序:

//Create an instance of the test handler that returns a bad request response
var testHandler = new TestHandler((r, c) =>
{
    return TestHandler.BadRequest();
});

//Create the HTTP client
var client = new HttpClient(testHandler);

//Fake call, will never reach out to foo.com
var request = new HttpRequestMessage(HttpMethod.Get, "http://www.foo.com");
request.Content = new StringContent("test");

//This will call the test handler and return a bad request response
var response = client.SendAsync(request).Result;


请注意,我有几个便捷的静态方法可以为我创建处理函数。

关于c# - 在VS 2017中使用MockHttpClient nuget包,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54046009/

10-09 02:26