我有一个包含两个项目的VS 2010解决方案:第一个是WCF服务,第二个是单元测试项目,包含对服务的引用并测试服务公开的方法。单元测试项目使用Microsoft.VisualStudio.TestTools.UnitTesting
框架开发。
在运行测试项目之前,我使用SVC文件上的右侧时钟在本地运行WCF服务,然后选择“在浏览器中查看”选项。只有当服务“在空中”时,测试才能真正运行。
我的问题是,是否有一个选项可以在单元测试开始运行之前使用C#代码或某种脚本自动运行服务?
答案 0 :(得分:2)
如果您真的想要在托管服务上运营,您可以在单元测试中自我托管。然后它将独立于基础设施,使其可重复,因此未来的开发人员将能够运行它们而无需进行任何其他设置。
但请三思,你想测试服务逻辑或其托管基础设施吗? WCF通过使用契约(接口)来实现解耦。您可以通过将服务类测试为任何其他类来成功测试服务逻辑,像任何其他方法一样调用Web服务方法。
如果您的服务具有外部依赖项(如其他服务),则应通过依赖注入维护它们。它可以让你嘲笑它们。如果您的服务依赖于全局或静态资源(如OperationContext
),请创建一个包装器,它也允许您注入其模拟。或者使用更复杂的解决方案,例如Microsoft Fakes(另请参阅this tutorial)或Typemock Isolator。
当您对所有逻辑进行测试时,您可以继续使用IIS托管服务进行集成测试,测试与其他资源的连接以及超时等边界条件。
答案 1 :(得分:1)
安装或配置IIS并从localhost上的URL运行WCF服务
http://localhost/my.wcf.service
从此处运行测试。
尽管从最严格的意义上说,通过http对代码运行测试是一种集成测试,而不是单元测试。