我想对一个工厂进行单元测试,在其中注入 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?
谢谢。
你已经嘲笑了
IHttpClientFactory
但没有告诉它当 CreateClient
被调用时要返回什么,所以它将返回 null。
你需要这样做:
var httpClientFactory = new Mock<IHttpClientFactory>();
httpClientFactory
.Setup(f => f.CreateClient(It.IsAny<string>()))
.Returns(...<your code to create a client>...);