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

时间:2014-07-30 07:38:46

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

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

我检查了选项"始终在调试时启动"在service-project的属性窗格中,它设置为true

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

单元测试和集成测试都有助于提高质量保证。通常,您应该创建单元测试,通过进程绑定接口直接测试服务代码,并确保它具有全面的代码覆盖率。

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

如果服务应该在调试模式下运行,那么如何在相同的VS sln运行中制作测试套装是一个什么样的难题。可能有一些解决方案:

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

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

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