什么是伪装对象(mock object)

来源:互联网 发布:java mongodb3 连接池 编辑:程序博客网 时间:2024/05/16 12:35

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

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

原创粉丝点击