【问题标题】:WCF project will not be hosted when unit test runs单元测试运行时不会托管 WCF 项目
【发布时间】:2014-07-30 07:38:45
【问题描述】:

我使用 IIS 模型创建了一个 WCF 项目。然后我创建了引用该项目服务的单元测试。现在,当我开始单元测试时,该服务未托管,因此我得到了 EndpointNotFoundExceptions。当我按 F5 时,一切正常,IIS Express 出现在托盘中。

我在服务项目的属性窗格中选中了“调试时始终启动”选项,它设置为true

【问题讨论】:

    标签: wcf unit-testing visual-studio-2013 .net-4.5


    【解决方案1】:

    单元测试是一个单元测试。如果您需要另一个进程(即一些 IIS 或其他 Web 服务器),它不再是一个封闭单元。如果您想在托管服务时对其进行测试,我建议您自己在测试中托管它。检查自托管服务。然后,您可以控制何时何地举办什么课程。例如,您可能希望单元测试使用不同的 URL,并且您可能希望注入不同的数据层,这样您的测试就不需要单元之外的任何东西,例如数据库。

    【讨论】:

    • 谢谢。我想,调试选项无论如何都会启动服务。我在这个项目中大量使用 DI,并且我有使用这些服务的通用包装器。所以我想用一个简单的 Foo 服务来测试这种行为。那我会检查自托管。谢谢。
    【解决方案2】:

    您不是在进行单元测试,而实际上是在进行集成测试,因为您的测试套件没有直接了解/绑定服务代码,它只是服务的客户端程序。

    单元测试和集成测试都有助于良好的 QA。一般应创建单元测试,通过进程内绑定接口直接测试服务代码,并确保其具有全面的代码覆盖率。

    然后使用 MS Test、NUnit 或 xUnit 作为测试工具创建集成测试,以测试服务的一些运行时行为。

    让您感到困惑的是,如何让测试套件在同一个 VS sln 中运行,而服务应该在调试模式下运行。可能有几个解决方案:

    1. 使用 Nunit 或 xUnit 构建测试套件,然后在以调试模式运行服务的 VS IDE 外部运行测试套件。实际上 MS Test 也可以支持,但仅限于命令行模式。

    2. 在 IIS 中托管服务,并且您有一个批处理文件可以在每次更新时将程序集和 web.config 复制到那里。然后将服务代码附加到相应的 w3wp.exe 实例中。

    3. 如果您只想测试而不是调试,可能还有另一种解决方案:使用 IIS Express。您可以使用 C# 代码或批处理文件在断开时使用服务启动 IIS Express,并在断开时关闭 IIS Express。

    【讨论】:

      猜你喜欢
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-07
      • 2011-02-23
      • 2023-04-10
      • 2019-11-29
      • 2013-02-08
      相关资源
      最近更新 更多