c# - In-Memory HttpServer 如何知道要托管哪个 WebAPI 项目?

标签 c# asp.net integration-testing asp.net-web-api

我想使用流行的内存托管策略针对 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 项目相同的设置进行测试。

注意事项:

  1. 使用内存服务器运行测试时,您的请求/响应不会经过格式化程序的序列化/反序列化过程,这很危险,因为您可能会在这些过程中遇到真正的问题。因此,您需要确保注意这一点。很久以前我写了一篇关于这个的博客文章。你可以看看here .

  2. Fiddler 工具对于查看原始请求/响应以诊断任何问题非常有用。但是,如果您正在进行内存中测试,您将失去这种能力。

关于c# - In-Memory HttpServer 如何知道要托管哪个 WebAPI 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16815407/

相关文章:

c# - '字典中不存在给定的键' - 但键存在

c# - 如何从C#调用Grails Web服务

asp.net - 我是否必须手动将来自 asp.net 4 电子邮件的信息输入到 MS 数据库中?

c# - 如何在 C# 中为集成测试播种数据库数据?

java - Spring Boot与Spock集成测试: stubbed method returns null

java - 非侵入式集成测试

c# - 通过 VS 接口(interface)进行表单控制的多个事件处理程序

c# - 使程序集 COM-Visible 中断 Excel VSTO 插件的构建

c# - LINQ to SQL 比较性能

asp.net - App_Data - Web 应用程序的数据目录。它有多安全?