首页 新闻 会员 周边 捐助

.NET: 集成测试中如何覆盖目标 Web 项目 Program 中注册的 HttpClient

0
悬赏园豆:30 [已解决问题] 解决于 2023-02-14 18:48

在 asp.net core integration testing 中,测试的目标 web 项目的 Program 中已经注册了 HttpClient,集成测试中需要用 HttpClient mock 覆盖已经注册的 HttpClient,请问如何实现?

dudu的主页 dudu | 高人七级 | 园豆:29732
提问于:2023-02-14 17:52
< >
分享
最佳答案
0

自定义class 集成 WebApplicationFactory.
完了在对于的override method 里面在重新注册要mock的东东.

[CollectionDefinition("WebFactory")]
public class MyWebApplicationFactory : WebApplicationFactory<Program>, ICollectionFixture<MyWebApplicationFactory >
{
    protected override void ConfigureWebHost(IWebHostBuilder builder)
    {
        base.ConfigureWebHost(builder);

        // replace mock object
        builder.ConfigureServices(services => { })
    }
}
收获园豆:30
czd890 | 专家六级 |园豆:14488 | 2023-02-14 18:27

重新注册不能覆盖已有注册

dudu | 园豆:29732 (高人七级) | 2023-02-14 18:28

@dudu: services.replace。
如果是类似httpclient 拿到httpclientbuilder 然后clear里面注册的configure action 或者任何想clear的东西

也可以mock一个自己的httpclien factory替换系统的 在之后想咋弄都由你

czd890 | 园豆:14488 (专家六级) | 2023-02-14 18:40

@czd890: 原来直接对 IServiceCollection 进行增删查改就可以了,services.Replace 实际就是先删除后添加,services.RemoveAll 可以删除所有 HttpClient 的注册

public class ZzkApiTestFactory : WebApplicationFactory<Program>
{
    protected override void ConfigureWebHost(IWebHostBuilder builder)
    {
        base.ConfigureWebHost(builder);

        builder.ConfigureServices(services =>
        {
            services.RemoveAll<HttpClient>();
        });
    }
}
dudu | 园豆:29732 (高人七级) | 2023-02-14 18:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册