- 浏览: 590225 次
- 性别:
- 来自: 杭州
-
文章分类
最新评论
-
lihaiming:
受用了,已把定义的版本改为跟本地的一致,不用担心找不到了,现应 ...
Cannot find the declaration of element 'beans' -
Albert_Hawking:
看到这个帖子,解决了我的问题。 我的总结是这样的:由于mave ...
Cannot find the declaration of element 'beans' -
di1984HIT:
学习了啊,哈哈哈~~
win7下安装的sqlserver ,1433端口不通 -
蛋呢823:
我也碰到这个问题,尝试了你这个方法也不行,自己摸索了一天,终于 ...
was缓存导致web.xml更改无效 -
liuxiyangyang:
文章帮了我大忙了,谢谢
Cannot find the declaration of element 'beans'
转自http://tech.chinaunix.net/a2009/1110/806/000000806622_2.shtml
mock测试:就是在测试过程中,对于某些不容易构造或者 不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。
mock对象:这个虚拟的对象就是mock对象。mock对象就是真实对象在调试期间的代替品。
mock对象使用范畴:
真实对象具有不可确定的行为,产生不可预测的效果,(如:股票行情,天气预报)
真实对象很难被创建的
真实对象的某些行为很难被触发
真实对象实际上还不存在的(和其他开发小组或者和新的硬件打交道) 等等...
使用mock对象测试的关键步骤:
使用一个接口来描述这个对象
在产品代码中实现这个接口
在测试代码中实现这个接口
在被测试代码中只是通过接口来引用对象,所以它不知道这个引用的对象是真实对象还是mock对象。
MockObject概述
使用Mock Object进行测试,主要是用来模拟那些在应用中不容易构造(如HttpServletRequest必须在Servlet容器中才能构造出来)或者比较复杂的对象(如JDBC中的ResultSet对象)从而使测试顺利进行的工具。
目前,在Java阵营中主要的Mock测试工具有JMock,MockCreator,Mockrunner,EasyMock,MockMaker等,在微软的.Net阵营中主要是Nmock,.NetMock等。
以下就对在Java中使用的Mock Object进行测试的常用工具做一下使用说明。
JMock
简介
准备
1.获取J2SDK;
2.获取JUnit V3.8.1(从http://www.junit.org获取开发包);
3.获取JMock V1.0(从http://www.jmock.org获取JMock开发包)。
4.为了开发方便,建议使用一个好IDE。以下例子中的代码均是在Eclipse V3.0环境下进行的调试。
例子一
以下是一个简单例子,代码如下:
import org.jmock.*;
import javax.servlet.http.*;
public class MockRequestTest extends MockObjectTestCase{
public void testMockRequest1(){
//构造一个Mock对象
Mock mock = new Mock(HttpServletRequest.class);
//设置要执行的操作,以下设置表示要调用一次HttpServletRequest对象的
//getParameter方法,传递的参数是"name",期望的返回是"kongxx"
mock.eXPects(once()).method("getParameter").with(eq("name")).will(returnValue("kongxx"));
//根据Mock对象获取一个HttpServletRequest对象
HttpServletRequest request = (HttpServletRequest)mock.proxy();
//断言调用结果
assertEquals("kongxx" ,request.getParameter("name"));
}
public void testMockRequest2(){
//构造一个Mock对象
Mock mock = new Mock(HttpServletRequest.class);
//设置要执行的操作,以下设置表示要调用一次HttpServletRequest对象的
//getParameter方法,传递的参数是"name",期望的返回是"kongxx"
mock.expects(once()).method("getParameter").with(eq("name")).will(returnValue("kongxx"));
//根据Mock对象获取一个HttpServletRequest对象
HttpServletRequest request = (HttpServletRequest)mock.proxy();
//调用HttpServletRequest对象的方法
request.getParameter("name");
//验证执行结果
mock.verify();
}
}
编译并将其当做一个Test Case运行,会发现两个测试方法均测试成功。
例子二
MyClass需要测试的类,提供了两个方法getName和getPassWord,都使用HttpServletRequest作为输入参数并返回从HttpServletRequest中取得的参数,具体代码如下:
import javax.servlet.http.*;
public class MyClass {
public String getName(HttpServletRequest request) {
return request.getParameter("name");
}
public String getPassword(HttpServletRequest request) {
return request.getParameter("password");
}
}
TestMyClass测试类,其中构造了一个假的HttpServletRequest对象,用来测试MyClass中的getName和getPassword方法,代码如下:
import org.jmock.*;
import javax.servlet.http.*;
public class TestMyClass extends MockObjectTestCase{
private MyClass myclass ;
private Mock mockRequest ;
private HttpServletRequest request ;
public void setUp() {
myclass = new MyClass();
//构造一个Mock对象
mockRequest = new Mock(HttpServletRequest.class);
//根据Mock对象获取一个HttpServletRequest对象
request = (HttpServletRequest)mockRequest.proxy();
}
public void tearDown() {
//TODO
}
public void testGetName(){
//设置要执行的操作,以下设置表示要调用一次HttpServletRequest对象的
//getParameter方法,传递的参数是"name",期望的返回是"kongxx"
mockRequest.expects(atLeastOnce()).method("getParameter").with(eq("name")).will(returnValue("kongxx"));
assertNotNull(myclass.getName(request));
assertEquals("kongxx" ,myclass.getName(request));
}
public void testGetPassword(){
//设置要执行的操作,以下设置表示要调用一次HttpServletRequest对象的
//getParameter方法,传递的参数是"password",期望的返回是"123456789"
mockRequest.expects(atLeastOnce()).method("getParameter").with(eq("password")).will(returnValue("123456789"));
assertNotNull(myclass.getPassword(request));
assertEquals("123456789" ,myclass.getPassword(request));
}
}
编译并将其当做一个Test Case运行,会发现两个测试方法均测试成功。
EasyMock
简介
准备
1.获取J2SDK;
2. 获取JUnit V3.8.1(从http://www.junit.org获取开发包);
3.获取EasyMock V1.1(从http://www.easymock.org获取EasyMock开发包)。
4.为了开发方便,建议使用一个好IDE。以下例子中的代码均是在Eclipse V3.0环境下进行的调试。
例子一
以下是一个简单例子,为了方便对比,这里重新实现了JMock例子一,代码如下:
import org.easymock.*;
import junit.framework.*;
import javax.servlet.http.*;
public class MockRequestTest extends TestCase{
private MockControl control;
private HttpServletRequest mockRequest;
public void testMockRequest(){
//创建一个Mock HttpServletRequest的MockControl对象
control = MockControl.createControl(HttpServletRequest.class);
//获取一个Mock HttpServletRequest对象
mockRequest = (HttpServletRequest) control.getMock();
//设置期望调用的Mock HttpServletRequest对象的方法
mockRequest.getParameter("name");
//设置调用方法期望的返回值,并指定调用次数
//以下后两个参数表示最少调用一次,最多调用一次
control.setReturnValue("kongxx" ,1 ,1);
//设置Mock HttpServletRequest的状态,
//表示此Mock HttpServletRequest对象可以被使用
control.replay();
//使用断言检查调用
assertEquals("kongxx",mockRequest.getParameter("name"));
//验证期望的调用
control.verify();
}
}
编译并将其当做一个Test Case运行,会发现两个测试方法均测试成功。
例子二
同例子一样,对JMock例子二重新实现产生了EasyMock的例子二。
需要测试的类代码如下:
import javax.servlet.http.*;
public class MyClass {
public String getName(HttpServletRequest request) {
return request.getParameter("name");
}
public String getPassword(HttpServletRequest request) {
return request.getParameter("password");
}
}
测试类代码如下:
import org.easymock.*;
import junit.framework.*;
import javax.servlet.http.*;
public class TestMyClass extends TestCase{
private MockControl control;
private HttpServletRequest mockRequest;
private MyClass myclass ;
public void setUp() {
myclass = new MyClass();
//创建一个Mock HttpServletRequest的MockControl对象
control = MockControl.createControl(HttpServletRequest.class);
//获取一个Mock HttpServletRequest对象
mockRequest = (HttpServletRequest) control.g
发表评论
-
【转】两个SB理论及其实践
2012-11-07 16:48 1219转自:http://blog.sina.com.cn/s ... -
项目管理 - CPI&SPI(三) - 一个好汉三个帮
2012-08-19 23:20 1416转自:http://blog.csdn.net/bowi ... -
项目管理 - CPI&SPI(二) - 越嚼越有味道的甘草
2012-08-19 23:17 1681转自:http://blog.csdn.net/bowieho ... -
项目管理 - CPI&SPI(一) - 玩不转的武器
2012-08-19 23:13 7437转自:http://blog.csdn.ne ... -
教你如何绘制帕累托图
2012-08-18 17:40 34359转自:http://qing.weibo.com/194 ... -
PMP获得PDU的经济方法
2012-05-27 11:24 1426通过PMP认证后,为了完成继续认证要求计 ... -
这些年的项目管理心得
2012-05-10 09:18 1029转自http://kb.cnblogs.com/pag ... -
软件项目管理原则谈(ZT)
2012-04-24 15:48 1047软件项目管理原则谈(ZT) ... -
LoadRunner配置方案
2012-03-26 22:52 2176http://www.51testing.com/?uid-1 ... -
离职136定律
2012-03-19 19:34 1974【离职定律】入职1个月:离职与HR关系较大;入职3个月:离职与 ... -
管理的目的在于用好人
2012-03-19 15:01 1020http://www.iteye.com/topic/1121 ... -
【阿里感悟】如何带好新员工
2012-02-06 08:50 1274转自:http://www.iteye.com/topi ... -
收藏一个前辈的2011 年终项目总结
2012-01-09 14:49 1132http://www.cnblogs.com/astar/ar ... -
项目管理有感—需求调研
2011-12-29 16:09 965转自:http://www.itpub.net/thread- ... -
项目经理六大要点
2011-12-06 14:04 1307转自:http://www.itpub.net/forum.p ... -
转:具体实例教你如何做LoadRunner结果分析
2011-12-02 15:25 1725转自:http://tech.it168.com/a2009/ ... -
SVN分支与合并透析
2011-11-25 16:05 1303转发自:http://blog.csdn.net/fby ... -
项目管理的“三边六拍”!
2011-11-09 10:29 1077转自http://www.cnblogs.com/u ... -
Projectt打印PDF格式
2011-11-07 11:29 12821、需要安装pdffactory pro 2、安装好之后打印 ... -
实现卓越项目管理技能(转载)
2011-08-24 16:48 1297弹指一挥间,时光飞逝,作为IBM GDC DE Lead ...
相关推荐
什么是 Mock 测试? -------------------- Mock 测试是一种软件测试方法,旨在模拟一些难以构造或获取的对象,以便进行测试。在测试过程中,Mock 对象可以帮助开发者更好地测试单元测试、集成测试和系统测试。Mock ...
本练习主要关注如何使用 `unittest.mock` 进行mock测试数据。 一、Mock对象的基本概念 Mock对象是模拟真实对象的一种工具,它可以在测试中替代真实的对象,以避免测试过程中对实际数据或外部服务的依赖。Mock对象...
### Mock模拟测试使用 #### 一、Mock是什么 Mock是一种软件测试技术,它涉及使用模拟对象来代替实际对象,以简化测试过程中的依赖性管理。在软件开发中,特别是面向对象编程中,类通常与其他类有复杂的交互。为了...
**什么是Mock测试?** Mock测试是一种软件测试技术,它允许在不依赖真实环境或第三方组件的情况下测试代码。在测试过程中,我们创建模拟对象(Mock Objects)来替代那些难以构造或控制的对象,比如在Spring MVC中,...
服务端Mock测试是一种在软件开发中广泛应用的技术,它允许测试工程师在没有依赖服务端的真实环境或者服务尚未完成时进行测试工作。Mock技术通过模拟真实的服务端行为,使得测试人员能够在本地模拟各种网络交互,从而...
对于“支持http接口自由mock,可根据需要进行接口mock测试”这一主题,我们可以深入探讨一下HTTP接口Mocking的概念、重要性以及如何使用工具如Moco进行实践。 HTTP接口Mocking是软件开发过程中的一个重要环节,特别...
MOCK挡板软件是一款专为测试人员设计的辅助工具,其主要目的是为了在软件测试阶段模拟实际环境或系统行为,以便于更有效地进行功能验证、性能测试、接口测试等多种测试任务。这款工具允许测试人员创建虚拟的服务或者...
Mock测试则是一种在真实后端服务未完成或不可用时,模拟后端数据来测试前端应用的方法。 本项目"iview.test测试demo"显然是一个基于Vue.js和Iview的实践示例,其中包含了拖拽排序的功能。拖拽排序是一种用户交互...
Mock方法则是单元测试中的一个重要工具,用于模拟复杂系统中的依赖关系,以便孤立地测试目标代码。在本篇文章中,我们将深入探讨单元测试与Mock方法的相关知识点。 首先,让我们理解单元测试的基本概念。单元测试是...
通过使用Mockito,开发者可以指定Mock对象在接收到特定方法调用时返回什么值,或者验证方法是否被正确调用。Mockito的@Mock注解用于创建Mock对象,@When注解用于配置Mock对象的行为,@Verify注解则用于确认方法调用...
【Mock测试方案详解】 在软件测试中,Mock测试是一种常用的技术,它允许我们在不依赖真实外部服务的情况下,模拟特定的依赖行为,以便更好地控制测试环境并确保测试的隔离性。以下是我们采用的三种Mock测试方案: ...
"Squaretest半自动生成Mock测试"是一个针对这个需求的工具,它旨在简化单元测试的创建过程,特别是对于那些需要模拟(Mock)外部依赖的场景。 单元测试通常包括三个主要部分:测试前的设置(SetUp),实际的测试...
Mock技术在软件开发中扮演着重要的角色,尤其是在测试领域。它允许开发者在不依赖实际环境或第三方服务的情况下,创建模拟对象来代替真实组件,以便进行单元测试和集成测试。这样可以提高测试效率,减少测试复杂性,...
mock测试框架中文文档
MockServer 是一个强大的工具,主要用于在开发过程中模拟服务器行为,特别是在接口开发和测试阶段。它允许开发者在没有实际后端服务的情况下,创建模拟的HTTP和HTTPS服务器,以便于快速验证前端代码或者自动化测试。...
首先,我们来理解什么是Google Mock。Google Mock允许开发者创建模拟对象,这些对象可以模拟复杂的依赖关系,以便在测试中隔离被测代码。这样,即使被测试对象依赖于其他难以控制或不存在的组件,我们也能准确地测试...
在Struts2中,有多种方式来实现Mock测试: 1. `junit怎么测试struts里的Action.htm`:这个文件名暗示了如何使用JUnit进行Struts2 Action的测试。JUnit是Java开发中最常用的单元测试框架,可以配合Mockito或EasyMock...
总的来说,Mock平台是服务端开发和测试的强大助手,通过零侵入的设计和JVM Sandbox的安全保障,它可以提供灵活且可控的模拟服务,帮助团队提高开发效率,减少对实际服务的依赖,并促进更好的协作。而`mock-fe-master...
Mock测试是一种测试思想,那就是通过模拟的手段提高模块的可测试性。测试性不强的模块是软件工程质量的大敌。 本资源位mock测试的简介及简单示例,使用android mock objects实现了模拟android MediaStore的功能。
"Java单元测试Spring Mock的使用" 在Java Web应用中,单元测试是非常重要的一步,它可以帮助开发者检测代码的正确性和可靠性。传统的单元测试方法需要部署到容器中,然而,这种方法存在一些缺陷,例如需要长时间的...