【问题标题】:Tests - .net core 3测试 - .net core 3
【发布时间】:2020-01-29 10:10:15
【问题描述】:

我正在 .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));
}

我在 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;
}

我应该如何编写该测试?

感谢您的帮助

【问题讨论】:

  • httpClientFactoryMock.CreateClient("csms").Returns(YourHttpClientForTests)
  • @Fabio 谢谢你的回答,但你能更准确吗?

标签: c# .net-core dependency-injection .net-core-3.0


【解决方案1】:

正如评论所述。您还没有嘲笑 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。

【讨论】:

    猜你喜欢
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 2023-04-04
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多