3

我试图解决的问题:

如何测试调用 REST 的客户端代码和真正的 REST 服务器代码(以一种有效的方式)?

目标:

  1. 这将是一种集成测试,但又快又容易

  2. 它将允许检测例如客户端使用错误动词调用 REST 方法的错误(例如 PUT,但 API 接受 POST)

  3. 我发现通过部署 REST 服务进行集成测试然后使用我的 API 库进行调用过于复杂,所以我想用内存单元/集成测试替换它

  4. 我发现 Flurl 库很有用,所以我想在这样的测试中使用它。

  5. 灵感:https ://stackoverflow.com/a/37510032/1453525

我的想法: 我想让我的 Flurl Api 测试针对在内存中运行的真实 ApiController(使用 HttpServer),而不是使用 Flurl HttpTest。我在这里找到了这种技术:https ://stackoverflow.com/a/37510032/1453525 但是它每次都需要构建 HttpRequest 消息并且没有很好的 Api 进行测试。是否可以针对真正的内存 ApiController 测试运行 Flurl 代码?

4

1 回答 1

3

我没有对此进行测试,但我相信您应该能够通过创建自定义HttpClientFactory和覆盖将 Flurl 与内存托管一起使用CreateMessageHandler

public class TestingClientFactory : DefaultHttpClientFactory
{
    public overrride HttpMessageHandler CreateMessageHandler()
    {
        var config = new HttpConfiguration();
        //configure web api
        WebApiConfig.Register(config);

        return new HttpServer(config);
    }
}

在您的测试程序集中,全局注册它,理想情况下只在测试夹具设置上运行一次:

FlurlHttp.Configure(settings => settings.HttpClientFactory = new TestingClientFactory());

现在每次 Flurl 需要在你的测试中创建一个新的 HttpClient 时,它都会使用内存服务器。

于 2017-07-18T00:56:25.810 回答