【问题标题】:Integration tests custom HTTP client in net core在 net core 中集成测试自定义 HTTP 客户端
【发布时间】:2017-02-27 08:13:02
【问题描述】:

我想弄清楚是否可以在集成测试中使用自定义 HTTP 客户端?

而不是从 TestServer 获取客户端实例

Client = Server.CreateClient() 

使用我自己的实现。喜欢:

Client = new DSClient(Server.BaseAddress.AbsoluteUri, Credential);

当我这样做时,我不断收到 404.WAIDW?

【问题讨论】:

  • 您是否在继承类中调用基构造函数?
  • @john 不。关键是我的 Client 是一个包装器,它不提供与 HttpClient 相同的方法
  • 如果 Server.CreateClient() 是自托管功能的一部分,那么您需要将其作为基础 HttpClient 传递到您的包装器中。我相信自托管功能完全在内存中运行。
  • 显然这并不意味着您需要公开与客户端提供的相同方法,但我认为您必须在包装方法中使用它。你想达到什么目的?是否可以通过创建自己的 DelegatingHandler 来完成?
  • @john 是的,你救了我。 Server = new TestServer(webHostBuilder); TestClient = Server.CreateClient(); Client = new DSClient(TestClient); 不得不用新的构造函数修改 DSClient 类,但它可以工作。谢谢

标签: c# integration-testing asp.net-core-webapi


【解决方案1】:

我遇到了同样的问题,在我的情况下,我无法使用现有的 HttpClient,因为我需要在初始化时修改 HttpClient。所以我的解决方案是创建一个服务器并使用我自己的 HttpClient 对其进行测试。

using(var server = WebHost.CreateDefaultBuilder(new List<string>().ToArray())
    .UseEnvironment("Test")
    .UseStartup<Startup>()
    .UseKestrel(options =>
    {
        options.Listen(IPAddress.Loopback, 5000);
    })
.Build())
{
    server.Start();
    var client = new HttpClient
    {
        BaseAddress = new Uri("http://localhost:5000")
    }
    var resp = client.GetAsync("test/testme").Result;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 2020-03-04
    • 2020-07-08
    • 1970-01-01
    • 2022-12-21
    相关资源
    最近更新 更多