在单元测试之前运行WCF服务

时间:2013-11-17 22:17:00

标签: c# wcf unit-testing

我有一个包含两个项目的VS 2010解决方案:第一个是WCF服务,第二个是单元测试项目,包含对服务的引用并测试服务公开的方法。单元测试项目使用Microsoft.VisualStudio.TestTools.UnitTesting框架开发。

在运行测试项目之前,我使用SVC文件上的右侧时钟在本地运行WCF服务,然后选择“在浏览器中查看”选项。只有当服务“在空中”时,测试才能真正运行。

我的问题是,是否有一个选项可以在单元测试开始运行之前使用C#代码或某种脚本自动运行服务?

2 个答案:

答案 0 :(得分:2)

如果您真的想要在托管服务上运营,您可以在单元测试中自我托管。然后它将独立于基础设施,使其可重复,因此未来的开发人员将能够运行它们而无需进行任何其他设置。

但请三思,你想测试服务逻辑或其托管基础设施吗? WCF通过使用契约(接口)来实现解耦。您可以通过将服务类测试为任何其他类来成功测试服务逻辑,像任何其他方法一样调用Web服务方法。

如果您的服务具有外部依赖项(如其他服务),则应通过依赖注入维护它们。它可以让你嘲笑它们。如果您的服务依赖于全局或静态资源(如OperationContext),请创建一个包装器,它也允许您注入其模拟。或者使用更复杂的解决方案,例如Microsoft Fakes(另请参阅this tutorial)或Typemock Isolator

当您对所有逻辑进行测试时,您可以继续使用IIS托管服务进行集成测试,测试与其他资源的连接以及超时等边界条件。

答案 1 :(得分:1)

安装或配置IIS并从localhost上的URL运行WCF服务

http://localhost/my.wcf.service

从此处运行测试。

尽管从最严格的意义上说,通过http对代码运行测试是一种集成测试,而不是单元测试。

相关问题