服务虚拟化——Mocking 的替代方案

  • Jonathan Allen
  • 李彬

2013 年 5 月 21 日

话题:测试架构

通过依赖注入进行 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)关注我们,并与我们的编辑和其他读者朋友交流。

测试架构