在.NET Core中集成测试自定义HTTP客户端

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

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

Client = Server.CreateClient() 

使用我自己的实现。类似于:

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

当我这样做时,经常出现404错误。WAIDW?

你在继承类中调用了基础构造函数吗? - ProgrammingLlama
@john 不是的。问题在于我的客户端是一个包装器,它没有提供与HttpClient相同的方法。 - Andrii Horda
2
如果Server.CreateClient()是自托管功能的一部分,那么您需要将其作为基本HttpClient传递到包装器中。我相信自托管功能完全在内存中操作。 - ProgrammingLlama
显然,这并不意味着您需要公开与客户端提供的相同方法,但我认为您必须在包装器方法中使用它。您想要实现什么?通过创建自己的DelegatingHandler可以完成吗? - ProgrammingLlama
3
@John,是的,你救了我。Server = new TestServer(webHostBuilder); TestClient = Server.CreateClient(); Client = new DSClient(TestClient);不得不用新构造函数修改DSClient类,但它能正常工作。谢谢。 - Andrii Horda
@John 如果你写了一个答案,我很乐意给它投票。你的建议对我也有用,所以我可以在我的测试中使用自定义HttpClient。 - AndrasCsanyi
1个回答

2

我遇到了同样的问题,但在我的情况下,我不能使用现有的 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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接