什么是伪装对象(mock object)

原创 2012年03月23日 16:55:25

作为一个开发人员,也需要具备一些测试方面的知识,对测试驱动开发以及提高工作效率都很有帮助。

很后悔以前没有好好看《Junit Recipes》这本书,亡羊补牢,现在开始积累Junit的一些知识,这是第一篇。

 

正文

在测试中,Mock Object(伪装对象)主要有两种功能,一种是像演员一样去模拟一个类,另一个功能则是像裁判一样裁决测试对这个模拟类进行的操作是否正确。

作为演员,它常被用来模拟在测试中难以设置或者要消耗较多时间来创建的对象。一个典型的例子是数据库连接对象。如果在每次开始测试开始时都要初始化数据库连接,会大大降低测试的速度,同时还需要安装数据库引擎并设置测试数据。如果我们能模拟数据库并返回查询的数据,那么波们不仅可以顺利通过测试,还能填入假数据来观察其反馈。我们可以模拟数据库宕机或其他极端情况,而不是真的去创建一个烂数据库。换句话说,我们能够由此取得对测试环境的控制权。

如果mock object只是扮演演员的角色,那么我们可以把它简单的认作server stub(服务存根)。这个模式是Robert Binder在1999年提出的(Testing object-oriented systems: models, patterns, and tools, Addison-Wesley) .

Server stub是对一个对象或组件的模拟。它能够在原型研究或测试中精确地取代原组件,并且保持轻量。它能够让测试跑得更快,同时在被模拟的类尚未被创建出来时就能让测试能够跑通。

然而,mock object的作用不仅仅是角色扮演。它对传入的信息敏感。

我们可以对Mock对象的方法指定期望值(Expected parameters),以便检查外部操作的合法性。如果外部操作与期望不符,就会抛出断言失败的信息,省却了我们手工编写断言的操作。

使用Mock Object进行测试,主要是用来模拟哪些在应用中不容易构造(如HttpServletRequest必须在Servlet容器中才能构造出来)或者比较复杂的对象(如JDBC中的ResultSet对象),从而使测试顺利进行的。

目前在Java阵营中主要的Mock测试工具有JMock,MockCreator,EasyMock,MockMaker等,在微软的.Net阵营中主要是Nmock,.NetMock等。

 

附:http://www.mockobjects.com/

jmockit mock 方法内创建对象的方法调用

测试的过程中,经常会出现的情况是有些
  • wenhuiqiao
  • wenhuiqiao
  • 2014年06月03日 10:43
  • 5352

Moq测试基础说谈(四)——Mock类,创建对象,实用工厂

Mock Class 定义为:   public class Mock : Mock where T : class   这的构造方法: Mock() Mock(MockBehavior) Mock(...
  • alicehyxx
  • alicehyxx
  • 2016年02月15日 11:11
  • 1916

使用强大的 Mockito 测试框架来测试你的代码

这篇教程介绍了如何使用 Mockito 框架来给软件写测试用例 1. 预备知识 如果需要往下学习,你需要先理解 Junit 框架中的单元测试。 如果你不熟悉 JUnit,请查看下面的教程: ...
  • GarfieldEr007
  • GarfieldEr007
  • 2016年12月27日 22:57
  • 1552

使用模拟对象(Mock Object)技术进行测试驱动开发

方 世明 (fangshim@cn.ibm.com), 软件工程师, EMC 方世明就职于 IBM 中国软件开发中心存储部门,从事存储设备管理软件的开发工作。 简介: 测试...
  • m13666368773
  • m13666368773
  • 2011年11月30日 11:56
  • 1638

mock object 测试 模拟对象

术语Tested Object – 被测对象Mock – 假的 or 仿制的对象 What is Mock Object?在讨论中我大致了解到Mock Object一般是用来做辅助单元测试,它负责隔离...
  • lionzl
  • lionzl
  • 2011年02月17日 17:20
  • 471

JUnit学习笔记10---mock object进行孤立测试4

尝试2:使用类工厂进行重构       我们采用Inversion of Control(IoC)模式,这个模式要求用到的任何的资源都要传给getContent方法或WebClient类。现在我...
  • sd4015700
  • sd4015700
  • 2013年04月16日 11:29
  • 681

单元测试的扩展:mock object

现实问题:      在实际的面向对象软件设计中,我们经常会碰到这样的情况,我们在对现实对象进行构建之后,对象之间是通过一系列的接口来实现。这在面向对象设计里是最自然不过的事情了,但是随着软件测试需...
  • Alex_zhuang
  • Alex_zhuang
  • 2011年12月31日 19:10
  • 1099

MOCK object-第7章

本博客(http://blog.csdn.net/livelylittlefish )贴出作者(三二一@小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正! Content 0. intro...
  • livelylittlefish
  • livelylittlefish
  • 2011年04月25日 13:38
  • 2681

Python2.7 安装mock出现AttributeError: 'module' object has no attribute的解决方法

原环境: 1.pip --verson : 1.0 from /usr/lib/python2.7/dist-packages (python 2.7) 2.uname -a :Linux pc 3....
  • u013102743
  • u013102743
  • 2017年02月18日 10:34
  • 4452

0积分:Mock对象教程

  • 2007年07月18日 14:16
  • 359KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:什么是伪装对象(mock object)
举报原因:
原因补充:

(最多只允许输入30个字)