【问题标题】:Can I use FlurlClient with Asp.Net Core TestServer?我可以将 FlurlClient 与 Asp.Net Core TestServer 一起使用吗?
【发布时间】:2018-05-03 12:58:25
【问题描述】:

我们在几个项目中使用 FlurlClient 并且熟悉他们流畅的界面。 我们现在想在使用 TestServer 的 asp.net 核心集成测试中使用它。 示例来自 http://asp.net-hacker.rocks/2017/09/27/testing-aspnetcore.html

_server = new TestServer(new WebHostBuilder()
                             .UseStartup<Startup>());
_client = _server.CreateClient();

我打算把代码改成

_server = new TestServer(new WebHostBuilder()
                             .UseStartup<Startup>());
var httpClient = _server.CreateClient();
_client = new FlurlClient(httpClient);

并使用所有 FlurlClient 方法/扩展。

但后来我注意到 Is it possible to use Furl.Http with the OWIN TestServer? 描述了在 owin 实现中需要做更多的工作。

Asp.Net Core TestServer 的方法是否相似?还是简化了?

【问题讨论】:

    标签: asp.net-web-api asp.net-core integration-testing flurl


    【解决方案1】:

    大大简化了,您提出的更改完全正确。您链接到的问题很旧,我的答案包含在 2.x 中不再相关的信息。 (我已经更新了它。)事实上,在FlurlClient 构造函数中直接提供现有HttpClient 的功能是在very recently 中添加的,并且考虑到了这个特定的用例。

    这是我用来替代CreateClient 的扩展方法;如果您经常这样做,您可能会发现它很方便:

    public static class TestServerExtensions
    {
        public static IFlurlClient CreateFlurlClient(this TestServer server) => 
            new FlurlClient(server.CreateClient());
    }
    

    【讨论】:

    • 嗨@todd-menier 一个问题:在我的特定场景中,我需要向testservers CreateClient-Method 添加一个HttpClientHandler,以便能够在集成测试中使用自签名证书通过SSL 进行调用(使用 testcontainers 并在 docker 中启动 keycloak 并希望在调用我的应用程序 API 时验证令牌,这会导致 atm 失败,因为证书无效)。据我所知,Testserver 本身是不可能的。那么当我将 HttpClient 包装到 FlurlClient 中时是否有可能?
    • @Dominik 不,如果不能用 TestServer/HttpClient 完成,那么用 Flurl 包装它也无济于事。 Flurl 只是在 HttpClient 上添加了一个更漂亮的面孔,但仍将大部分实际工作交给它。
    • 感谢您的澄清,我是这么认为的。所以我添加了这个问题并希望在那里有更好的运气:stackoverflow.com/questions/66062832/… :)
    猜你喜欢
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多