如何使用 Flurl 测试内存中的 ASP.NET Web API 运行?
How to test an ASP.NET Web API running in-memory using Flurl?
我尝试解决的问题:
如何测试调用 REST 的客户端代码和真正的 REST 服务器代码(以一种有效的方式)?
目标:
这将是一种集成测试,但又快又简单
它将允许检测 e。 G。客户端使用错误动词调用 REST 方法的错误(例如 PUT,但 API 接受 POST)
我发现通过部署 REST 服务进行集成测试然后使用我的 API 库进行调用过于复杂,所以我想用内存中的 unit/integration 测试
我觉得 Flurl 库很有用,所以我想在这样的测试中使用它。
灵感:
我的想法:
我想在内存中(使用 HttpServer)对真实的 ApiController 运行 进行 Flurl Api 测试,而不是使用 Flurl HttpTest。我在这里找到了这个技巧:
但是它需要每次都构建 HttpRequest 消息并且没有很好的 Api 用于测试。是否可以 运行 Flurl 代码来对抗真正的内存中 Api 控制器测试?
我没有对此进行测试,但我相信您应该能够通过创建自定义 HttpClientFactory
并覆盖 CreateMessageHandler
:
来将 Flurl 与内存托管一起使用
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 时,它都会使用内存服务器。
我尝试解决的问题:
如何测试调用 REST 的客户端代码和真正的 REST 服务器代码(以一种有效的方式)?
目标:
这将是一种集成测试,但又快又简单
它将允许检测 e。 G。客户端使用错误动词调用 REST 方法的错误(例如 PUT,但 API 接受 POST)
我发现通过部署 REST 服务进行集成测试然后使用我的 API 库进行调用过于复杂,所以我想用内存中的 unit/integration 测试
我觉得 Flurl 库很有用,所以我想在这样的测试中使用它。
灵感:
我的想法:
我想在内存中(使用 HttpServer)对真实的 ApiController 运行 进行 Flurl Api 测试,而不是使用 Flurl HttpTest。我在这里找到了这个技巧:
我没有对此进行测试,但我相信您应该能够通过创建自定义 HttpClientFactory
并覆盖 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 时,它都会使用内存服务器。