【问题标题】:WebAPI app and integration tests in same solution同一解决方案中的 WebAPI 应用程序和集成测试
【发布时间】:2015-04-26 15:46:39
【问题描述】:

我有一个 WebAPI 应用程序和一个用于通过 HTTP 调用 API 的应用程序的集成测试套件。目前我在 Visual Studio 2013 的一个实例中运行集成套件,并在另一个实例中手动启动 WebAPI 应用程序,以便在 IIS Express 上运行。

是否可以配置 VS2013 以便我可以在同一个解决方案中拥有测试套件和应用程序并简单地运行测试套件(我正在使用 nunit 和正在运行的 resharper),此时它将负责构建并启动网络应用?

【问题讨论】:

    标签: asp.net visual-studio-2013 asp.net-web-api nunit


    【解决方案1】:

    您可以在 self-host 中配置 WebAPI。然后在您的测试夹具设置中,您将启动主机并在每次测试后将其拆除。然后,您的所有测试都将配置为命中本地托管的 API。

    【讨论】:

    • 听起来很理想,但是这些说明asp.net/web-api/overview/hosting-aspnet-web-api/… 假设您将在作为入口点的项目中定义控制器等。我有一个用于测试套件的项目和一个用于 Web 应用程序的项目,所以不确定这是否可行?也许它会,我只需要弄清楚这一切是如何联系在一起的。
    • 您可以将控制器放在单独的程序集中,只需编写自定义IAssembliesResolver,如下所示:developer.com/net/asp/self-hosting-an-asp.net-web-api.html。这将允许您从控制器所在的实际程序集中加载控制器,而不是使用包含自主机的当前单元测试程序集。
    • 太棒了。我正在使用 StructureMap.MVC,这一切都会被自定义解析器的虚拟正确初始化,还是我必须明确地这样做?
    • 只要你调用这个方法来引导你的 DI,它就可以工作。
    • 我怀疑github.com/webadvanced/Structuremap.WebAPI2 不能与 OWIN 自托管一起使用,因为它使用 nuget.org/packages/StructureMap.MVC5 而 MVC5 不能自托管:(
    【解决方案2】:

    我真的不明白为什么 VS 不支持这个。这似乎是一个非常普遍的问题。

    无论如何...我找到了一个(丑陋的)解决方法。

    两次打开您的解决方案(也就是说,两个 VS 实例使用相同的解决方案打开):

    • 在第一个VS中:
      • 在调试模式下运行 Web API 项目
    • 在第二个中:
      • 卸载 Web API 项目(测试必须在运行之前构建,如果“加载”了 Web API 项目,则构建过程将失败,因为输出 dll 无法被覆盖 - 它们正被其他窗口使用)
      • 运行单元测试! :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多