测试 - .net 核心 3
Tests - .net core 3
我正在 .net core 3(我的第一个)中创建一个 Rest API。在那个 API 中,我做了一个从某些 API 方法调用的 dll。
我想在该 dll 上编写一些测试,但我在某些依赖项注入和获取 API ConfigureServices 中设置的值方面存在一些问题。我的主要问题是使用 IHttpClientFactory 按名称获取 HttpClient。
我的架构是:
- WebApi 项目
- dllApi 项目
- 项目测试
这是我的配置服务:
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));
}
我的 class 在 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;
}
我应该如何编写该测试?
感谢您的帮助
如评论所述。您还没有嘲笑 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。
我正在 .net core 3(我的第一个)中创建一个 Rest API。在那个 API 中,我做了一个从某些 API 方法调用的 dll。 我想在该 dll 上编写一些测试,但我在某些依赖项注入和获取 API ConfigureServices 中设置的值方面存在一些问题。我的主要问题是使用 IHttpClientFactory 按名称获取 HttpClient。
我的架构是:
- WebApi 项目
- dllApi 项目
- 项目测试
这是我的配置服务:
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));
}
我的 class 在 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;
}
我应该如何编写该测试?
感谢您的帮助
如评论所述。您还没有嘲笑 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。