我想使用流行的内存托管策略针对 WebAPI 项目运行测试。
我的测试驻留在一个单独的项目中。
这是我测试的开始
[TestMethod]
public void TestMethod1()
{
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new {id = RouteParameter.Optional});
HttpServer server = new HttpServer(config);
HttpMessageInvoker client = new HttpMessageInvoker(server)
}
客户端使用 HttpServer 初始化,建立直接的客户端-服务器连接。
除了提供路由配置信息外,HttpServer 如何知道要托管哪个 WebAPI 项目?
如何同时托管多个WebAPI项目?
似乎 HttpServer 对定位 WebAPI 项目有一些魔力?
谢谢
最佳答案
Web API 依赖于名为 IAssembliesResolver
的服务来获取所有程序集并扫描它们以查找实现 IHttpController
接口(interface)的 Controller 。
现在,有时 Web API 可能无法找到您的 Controller ,具体取决于程序集是否已加载到当前应用程序域中。在那种情况下,您需要确保您的程序集已加载。
查看您的示例测试代码,您似乎没有引用 Web API 项目中的任何类型,在这种情况下,我假设不会加载 Web API 项目的程序集。
此外,您似乎在测试中再次注册了路线。我建议使用 Web API 项目的 WebApiConfig.Register(HttpConfiguration)
来完成所有注册工作。这样,您将使用与您的 Web API 项目相同的设置进行测试。
注意事项:
使用内存服务器运行测试时,您的请求/响应不会经过格式化程序的序列化/反序列化过程,这很危险,因为您可能会在这些过程中遇到真正的问题。因此,您需要确保注意这一点。很久以前我写了一篇关于这个的博客文章。你可以看看here .
Fiddler 工具对于查看原始请求/响应以诊断任何问题非常有用。但是,如果您正在进行内存中测试,您将失去这种能力。
关于c# - In-Memory HttpServer 如何知道要托管哪个 WebAPI 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16815407/