通过依赖注入进行 Mocking 非常麻烦。即便最简单的应用,往往也会涉及创建新的接口,并且依赖于 IoC 容器,而且通常会增加大量不必要的复杂性。除此种种,开发者仍然必须编写 Mock 本身,而其中大部分除了过于简单的单元测试外并没有其他用途。
而诸如 CA Lisa 服务虚拟化等产品提供了一个替代方案。这些测试工具支持开发者在网络层面 Mock 整个服务,而不是 Mock 单独的类。从应用角度看,它是与真实的服务后端对话,哪怕实际上该后端甚至可能尚不存在。
有两个建立虚拟化服务的常用方法。第一个方法是,从契约(例如,一个WSDL 或其他协议特定的描述符)开始,创建预定响应。开发者可以使用一般的Java 或.NET 代码手工完成,或是使用商业产品来完成。该方法的优点之一在于,编写组件的团队无需等待服务的真实版本完成。其缺点则在于,真实版本需要实际匹配模拟版本,而随着时间的推移,这将成为一个值得商榷的命题。
另一个方法是使用流量记录。在被测组件及其下游依赖之间安放一个工具。基本上,该工具扮演的是代理的角色,收集关于组件间如何交互的信息。稍后这些记录可以被用于模拟组件和它依赖的服务器之间的会话。
这两个方法支持大部分通信协议。借助恰当的插件和过滤器,该测试工具应该能够支持消息队列、REST、SOAP、原始TCP,或其它任何交换方式。
查看英文原文: Service Virtualization as an Alternative to Mocking
感谢臧秀涛对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。
评论