我正在.net核心3中创建Rest (我的第一个)。在那个API中,我做了一个我从一些API方法调用的dll。我想在该dll上编写一些测试,但是在API ConfigureServices中设置一些依赖项注入和获取值方面有一些问题。我的主要问题是如何用HttpClient来命名IHttpClientFactory。
我的建筑是:
这是我的ConfigureServices:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddHttpClient("csms", c =>
{
c.BaseAddress = Configuration.GetValue<Uri>("ExternalAPI:CSMS:Url");
});
services.AddSingleton(typeof(IdllClass), typeof(dllClass));
}我在dll中的类
public class dllClass
{
private readonly IHttpClientFactory ClientFactory;
public dllClass(IHttpClientFactory clientFactory)
{
ClientFactory = clientFactory;
}
public async Task<Credentials> GetCredentials()
{
var request = new HttpRequestMessage(HttpMethod.Get, $"Security/GetCredentials");
using (var client = ClientFactory.CreateClient("csms"))
{
var response = await client.SendAsync(request);
}
return new Credentials();
}
}我尝试了不同的方法(莫克,替代,.)我从我的目标中得到的最接近的是下面这个,但它找不到HttpClient的名字:
public void GetCredentials()
{
var httpClientFactoryMock = Substitute.For<IHttpClientFactory>();
var service = new dllClass(httpClientFactoryMock);
var result = service.GetCredentials().Result;
}我该怎么写那个测试?
谢谢你的帮助
发布于 2020-01-29 10:26:23
正如评论所述。您还没有模拟CreateClient方法。它应该如下所示:
public void GetCredentials()
{
var httpClientFactoryMock = Substitute.For<IHttpClientFactory>();
var csmsTestClient = new HttpClient();
httpClientFactoryMock.CreateClient("csms").Returns(csmsTestClient)
var service = new dllClass(httpClientFactoryMock);
var result = service.GetCredentials().Result;
}然后,您需要设置您的HttpClient指向任何您想要测试的url。
https://stackoverflow.com/questions/59964773
复制相似问题