当我模拟 IHttpClientFactory 并创建 HttpClient 时,HttpClient 为 null

问题描述 投票:0回答:1

我想对一个工厂进行单元测试,在其中注入 IHttpClientFactory,并且该工厂创建一个使用 HttpClient 的类。

这是代码:

public class ClientFactory : IClientFactory
{
    private readonly IHttpClientFactory _httpClientFactory;



    public ClientFactory(IHttpClientFactory paramHttpClientFactory)
    {
        _httpClientFactory = paramHttpClientFactory;
    }



    public CLient CreateClient(ClientCofiguron paramConfiguration)
    {
        HttpClient httpClient = _httpClientFactory.Create();

        //Configure httpClient
    }
}

这就是我尝试使用 xUint 进行测试的方法:

[Fact]
public async Task Create_Client()
{
    var httpClientFactory = new Mock<IHttpClientFactory>();

    IClientFactory ClientFactory = new FactoriaSolicitanteFichero(httpClientFactory.Object);
    Client = clientFactory.CreateCLient(...);
}

问题在于,在ClientFactory.CreateClient方法中,创建的httpClient为null,所以我可以使用HttpClient来创建客户端。

我想我使用 Moq 的方式不正确。我应该如何模拟 HttpClientFactory?

谢谢。

c# mocking xunit httpclientfactory
1个回答
1
投票

你已经嘲笑了

IHttpClientFactory
但没有告诉它当
CreateClient
被调用时要返回什么,所以它将返回 null。

你需要这样做:

var httpClientFactory = new Mock<IHttpClientFactory>();
httpClientFactory
    .Setup(f => f.CreateClient(It.IsAny<string>()))
    .Returns(...<your code to create a client>...);
© www.soinside.com 2019 - 2024. All rights reserved.