首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试- .net核心3

测试- .net核心3
EN

Stack Overflow用户
提问于 2020-01-29 10:10:15
回答 1查看 69关注 0票数 0

我正在.net核心3中创建Rest (我的第一个)。在那个API中,我做了一个我从一些API方法调用的dll。我想在该dll上编写一些测试,但是在API ConfigureServices中设置一些依赖项注入和获取值方面有一些问题。我的主要问题是如何用HttpClient来命名IHttpClientFactory。

我的建筑是:

  • 项目WebApi
  • 项目dllApi
  • 项目测试

这是我的ConfigureServices:

代码语言:javascript
复制
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中的类

代码语言:javascript
复制
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的名字:

代码语言:javascript
复制
public void GetCredentials()
{
    var httpClientFactoryMock = Substitute.For<IHttpClientFactory>();
    var service = new dllClass(httpClientFactoryMock);
    var result = service.GetCredentials().Result;
}

我该怎么写那个测试?

谢谢你的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-29 10:26:23

正如评论所述。您还没有模拟CreateClient方法。它应该如下所示:

代码语言:javascript
复制
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。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59964773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档