何时应该使用Mock对象?

简介:

英文原文:http://www.infoq.com/news/2008/06/mocks-q-of-when

中文原文:http://www.infoq.com/cn/news/2008/06/mocks-q-of-when

在“Ode To Code“网站上,K Scott Allen理性地分析了如何在单元测试中使用mock对象,并分享了他针对mock对象框架使用情况的想法
首先,Allen就人们对mock的常见误解,抛出了尖锐的意见:

我们知道,像与SMTP服务器通信的对象这样的资源,是很难在单元测试中使用的,有些人以为,只有在需要模拟出与这种资源之间的交互行为时,才用得上mock对象。他们是错的。
接下来,他引用了 Colin Mackay讲述mock的论文 ,列出了一些常见的使用mock的场景:
  • 真实对象有着不确定的行为
  • 真实对象很难创建
  • 真实对象的行为很难触发
  • 真实对象响应缓慢
  • 真实对象是用户界面
  • 真实对象使用了回调机制
  • 真实对象尚未存在
然后Allen便道出了文章的主旨。他认为,即使是上面列表中的内容也稍显肤浅,从更深刻、更普遍的意义而言,应该是”在你想把被测试的代码分离的时候, test doubles [mocks]就显出了作用。“简而言之,按照Allen的观点,用了mock对象,业务组件的测试代码就可以不依赖其它组件了;试举一例来看,A依赖于B,但A的单元测试只会因为A的问题而出现问题,跟B的状态无干。
文章还讲到了在真正的测试驱动开发中, mock对象所扮演的角色
" 模拟角色,而非对象"的作者们写到,mock技术: 
"……在基于对象角色构建的系统中,可以识别出各种角色类型……尤其是,我们已经知道了Mock Object可以为我们带来的最大好处——曾被称为接口识别的概念"。
在文章的最后,Allen评价了一些mock对象框架,包括 JMock EasyMock NUnit 。他坚持认为,虽然这些框架很简单,但是想用得得心应手,还得花些心思。

在TDD yahoo讨论组上,也发起了精彩的讨论,值得一读。


本文转自一个程序员的自省博客园博客,原文链接:http://www.cnblogs.com/anderslly/archive/2008/06/12/1218650.html,如需转载请自行联系原作者。


目录
相关文章
|
缓存 测试技术
podam mock 对象部分字段没有赋值问题
本文主要分析使用 podam mock 对象时,部分字段无法自动赋值的原因,并给出解决方案。
|
4月前
|
JavaScript 数据安全/隐私保护
|
5月前
|
JavaScript 前端开发 API
vue项目中配置简单的代理与promise,并简单封装请求接口
vue项目中配置简单的代理与promise,并简单封装请求接口
24 0
|
JSON 前端开发 JavaScript
你还在用静态的 Mock 数据吗
作为前端开发者,在前后端分离的时代下,不能一天到晚追着后端的同学要接口调试,我们可以自己来 Mock 现在的打包工具或者框架基本都支持或者通过第三方插件支持了 Mock 数据的能力。对于写死的静态数据而言,我们可以使用 MockJS 来生成动态的数据,这至少这样看起来更逼真,而且更方便,可以通过 Mock 的表达式来生成指定格式及数量的 JSON 数据。
155 0
|
前端开发 JavaScript
Mock 语法讲解
Mock 是生成随机数据,拦截 Ajax 请求的 JavaScript 库。 本文来介绍下 Mock 的常用语法。
Mock 语法讲解
|
前端开发 JavaScript API
Vue3项目配置Mock模拟接口数据
Vue3项目配置Mock模拟接口数据
719 0
Vue3项目配置Mock模拟接口数据
|
前端开发 API 数据库
vue-mock-代理配置
mock其实我在工作中用到的场景真不多,可能我们后端比较给力吧, 通常都是设计界面一出,我先开始推演布局,数据结构自己先写死,因为其实工作时间长了,有些字段的名字大家都知道,服务器人员数据库设计好之后,我直接连数据库查看字段,修改不一样的字段,这期间请求什么的结构也都是完善的,就等服务器人员接口完成,开测,进行微调.
391 0
vue-mock-代理配置
|
敏捷开发 设计模式 Java
mock打桩之EasyMock
TDD是测试驱动开发(Test-Driven Development)的英文简称,是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。TDD虽是敏捷方法的核心实践,但不只使用于XP(Extreme Programming),同样可以适用于其他开发方法和过程。
mock打桩之EasyMock
|
Java
Mock使用
SpringBoot/SpringMvc使用Mock/MockBean 做单元测试
2196 0
mock 使用方法
安装 npm install mockjs 全局引入 main.js import "@/utils/mock"; 配置 src/utils/mock.
1557 0