什么是伪装对象(mock object)

本文介绍了Mock Object(伪装对象)在测试中的重要性,它用于模拟复杂或耗时的对象,如数据库连接,以加快测试速度并控制测试环境。Mock对象不仅能扮演对象角色,还可以设置期望参数以验证调用的正确性。文章提到了Java和.NET阵营中的Mock测试工具,如JMock、EasyMock和NMock。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

很后悔以前没有好好看《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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值