当单元测试运行时,WCF项目将不会被托管



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

我在service-project的属性窗格中选中了"Always start when debugging"选项,它被设置为true

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

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

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

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

让你困惑的是,当服务应该在调试模式下运行时,如何使测试服在相同的vssln中运行。可能有一些解决方案:

  1. 使用Nunit或xUnit构建测试服,然后在以Debug模式运行服务的VS IDE外运行测试服。实际上MS Test也可以支持,但只能在命令行模式下。

  2. 在IIS中托管服务,您有一个批处理文件来复制程序集和web。在每次更新时配置到那里。然后用各自的w3wp.exe实例附加服务代码。

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

最新更新