WCF服务的"快速"集成测试

Bre*_*ias 6 wcf continuous-integration integration-testing unit-testing .net-4.0

上下文

我非常喜欢Roy Osherove所说的"快速集成测试".这是集成测试:

  • 严格按照您的开发框执行.无需单独的环境.
  • 尽管进行了集成测试,但通常会从您的单元测试工具(NUnit,MsTest等)启动此类测试.
  • 通常在内存中运行:执行单个进程.
  • 跑得快.不应该进行长达数秒的部署,然后进行长达数秒的启动捆绑等.
  • 必须是源代码控制友好:
    • 其他开发人员应该能够简单地提取源并运行快速集成测试,而无需解决配置问题(例如,设置IIS虚拟目录等)
    • 只要有可能,它应该与持续集成(CI)自动化测试兼容.

问题

鉴于VS 2010解决方案需要对几个WCF服务进行集成测试,我一直在研究如何最好地解决这个问题.我对测试设置的进一步要求是:

  • WCF服务是嵌套的.也就是说,一个服务可能在快速集成测试期间调用另一个服务.
  • WCF堆栈必须完全或大部分可操作.
    • 直接调用服务合同入口点可能适用于单元测试,但不适用于这种形式的集成测试.
    • REST和BasicHttp绑定应该可以工作,最好也是wsHttpBinding.
  • Web.config文件
    • 每个WCF项目的web.config转换(XDT)应该是可操作的,即使可能会或可能不会发生部署以实现此测试.
    • 单元测试工具,如MSTEST或NUnit的,应该要求所有的代表将在测试过程中被托管的服务,统一的web.config文件.
  • WCF服务托管可以是32位或64位.
  • WCF服务托管可以使用单元测试工具在内存中,也可以通过Cassini,IIS Express等主机进行进程外处理.
    • 我绝对倾向于内存方法,因为它简化了测试同步问题.换句话说,我的一些WCF服务执行异步和完成的WCF响应已发送到文本夹具.通过内存方法,我可以制作测试夹具,Monitor.Wait以确保在测试退出之前完成异步工作.对于多进程托管和测试,我可能必须依赖文件系统和文件系统事件来实现相同的同步.

回答?

我想列出我到目前为止的调查结果,并询问我缺少哪些工具或技术.同样,这个问题与Visual Studio 2010有关,但欢迎有关2012年的其他评论.

对于内存中的解决方案,似乎有两个基本选择.为每个服务使用一个自定义ServiceHost实例,或使用各种其他自托管工具之一.在第二个链接中,最初的问题是关于生产托管 - 但是大多数列出的工具都能够自我或内存托管.

在上面的第二个链接中提到的CassiniDev的作者建议在环回测试(localhost)不足时使用CassiniDev.就我而言,我怀疑环回测试很好.该作者建议,当环回测试没问题时,一个更轻量级的故事就是使用他的WebDevServer代码.如果我理解正确,WebDevServer代码实际上是内部Visual Studio代码,他为了测试夹具自托管目的而反映和修改.

对于机上(多进程)解决方案,我发现有一种方法可以使Cassini符合64位要求.否则,对于IIS Express或IIS,我不确定开发人员到开发人员的可配置性问题.通常,当开发人员在特定计算机上配置IIS Express或IIS时,通常其他开发人员没有该配置信息,并且正在努力使测试工作在他们自己的盒子上.我见过开发人员生成的脚本使用appcmd.exe来自动化这样的配置,但是这些脚本经常很难维护.我想尽量避免这种情况.

在任何一种情况下,我都相信我的选项是自动化web.config转换(XDT),而不需要部署,这里讨论.

好的,有什么更好的策略和策略?我想知道...

ste*_*hen 1

这并没有回答提问者所要求的快速集成测试的问题,但下面的链接是有关如何使 WCF 可测试的最全面的指南。

https://codereview.stackexchange.com/questions/33379/make-wcf-service-testable?newreg=016e2809b68248958ff3c45973efe643

但是,我无法保证本指南将带您在为完整的 WCF 功能堆栈开发测试方面走多远。