EasyMock 模拟对象测试
一、EasyMock 使用动态代理实现模拟对象创建,一般可以满足以下测试需求
1、要测试的模块依赖于其它自己控制不了的模块,如第三方服务,其它组员在开发的服务等,它们都没办法配合你来测试;
2、涉及到数据库操作,但当时条件连接不了数据库或你不想将自己的测试结果改动到数据库;
3、模块依赖于spring容器注入其它服务实例,但你又不想启动spring容器。
总之,EasyMock能帮我们模拟出任何我们想要的支持对象,并且我们可以使用这些对象进行逻辑操作
二、具体使用方法
1、模拟成员变量
EasyMock.createMock(要模拟的成员变量类型);
2、设定模拟成员的函数行为
1)有返回值
Easymock.expect(模拟成员的某个要模拟的函数).andReturn(期待的返回值)
2)没返回值
首先模拟成员调用要模拟的函数,然后在后面跟上一句:EasyMock.expectLastCall(),如果希望为该函数加上一个返回,可以用:
EasyMock.expectLastCall().andAnswer(new IAnswer<任何类型>(){
public String answer() throws Throwable {
log.info(EasyMock.getCurrentArguments()[0]);//打印参数,以确定传参是否准确([0]表示第一个参数)
return 作何类型;
}
});
因为完全没返回又没日志输出的时候,你可能很难确定这个函数的操作结果是什么
3、模糊参数
有时候要模拟的函数的参数是在程序运行过程中调用的,参数值来自于程序执行结果,这时可以用模糊参数来解决,模糊参数有:
isA、isNull、anyInt等
4、开始测试
EasyMock.replay(模拟成员);
三、实例
1、要测试的类
public class UserServiceImpl{
private UserDao dao;
public List<String> queryNames(String[] ids) throws Exception{
try{
return dao.getNames(ids);
}catch(Exception e){
throw e;
}
return null;
}
}
该类依赖UserDao,但UserDao可能还没实现,或要靠spring容器来注入
2、测试代码
@Test
public void test() {
String[] ids = {'1','2','3'};
List<String> returnNams = Arrays.asList("a,b,c".split(","));
UserDao userDaoMock = EasyMock.createMock(UserDao.class);//创建模拟成员
EasyMock.expect(userDaoMock.getNames(ids )).andReturn(returnNams);
EasyMock.replay(userDaoMock );//重放Mock对象
UserServiceImpl userServiceImpl = new UserServiceImpl();
userServiceImpl .queryNames(ids);//目标类调用目标方法
EasyMock.verify(userDaoMock );//验证Mock对象
}
EasyMock 模拟对象测试的更多相关文章
- 模拟对象测试——EasyMock
一.EasyMock 使用动态代理实现模拟对象创建,一般可以满足以下测试需求 1.要测试的模块依赖于其它自己控制不了的模块,如第三方服务,其它组员在开发的服务等,它们都没办法配合你来测试: 2.涉及到 ...
- 使用模拟对象(Mock Object)技术进行测试驱动开发
敏捷开发 敏捷软件开发又称敏捷开发,是一种从上世纪 90 年代开始引起开发人员注意的新型软件开发方法.和传统瀑布式开发方法对比,敏捷开发强调的是在几周或者几个月很短的时间周期,完成相对较小功能,并交付 ...
- [Test] 单元测试艺术(2) 打破依赖,使用模拟对象,桩对象,隔离框架
在上节中,完成了第一个单元测试,研究了各种特性,在本节,将介绍一些更实际的例子.SUT依赖于一个不可操控的对象,最常见的例子是文件系统,线程,内存和时间等. 本系列将分成3节: 单元测试基础知识 打破 ...
- springBoot单元测试-模拟MVC测试
1)模拟mvc测试,和基础测试是一样的, 都需要在pom文件中引入junit的支持. 略 2)编写测试类 Application1TestMVC 在类头上除啦加入之前的@RunWith(SpringR ...
- 《Entity Framework 6 Recipes》中文翻译系列 (46) ------ 第八章 POCO之领域对象测试和仓储测试
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 8-8 测试领域对象 问题 你想为领域对象创建单元测试. 这主要用于,测试特定的数 ...
- 好用的在线HTTP接口测试 - HTTP GET/POST模拟请求测试工具-ApiPost
现在的模拟发送请求插件很多比如老外的postman等,但亲测咱们国内的 ApiPost 更好用一些,因为它不仅可以模拟发送get.post.delete.put请求,还可以导出文档,支持团队协作也是它 ...
- 前端如何使用easy-mock模拟接口
1. 如何使用easy-mock // 获取 easy-mock 的模拟数据 getData () { // 开发环境使用 easy-mock 数据,正式环境使用 json 文件 if (proces ...
- [python学习篇][书籍学习][python standrad library][内置类型]对象测试真值,布尔值操作, 比较操作
几乎所有对象都可以比较.测试真值.转换为字符串(其实就是用repr()函数,或略有差异的str()函数来转换) 1 对象是否为真 任何对象都可以测试真值,用于if或while的条件或下面布尔运算的操作 ...
- jmeter模拟spike测试(尖峰测试)
概述 尖峰测试(Spike testing)在性能测试中属于压力测试的一个子集.指的是在某一瞬间或者多个频次下用户数和压力陡然增加的场景. 为了验证我们的网站在访问用户急剧增加的情况下,或者短时间内反 ...
随机推荐
- 如何分析java内存泄漏问题
java中的内存泄漏首先需要dump文件出来,主要包括内存dump.线程dump: 内存dump是指通过jmap -dump <pid>输出的文件,而线程dump是指通过jstack &l ...
- Centos 7 搭建FTP详细配置步骤方法
vsftpd的安裝使用: ftp概述:FTP(File Transfer protocol,文件传输协议)是经典的C/S架构的应用层协议,需要有服务端软件,客户端软件两个部共同组成实现文件传输功能. ...
- JavaScript(ES6)学习笔记-Set和Map数据结构(一)
一.Set 1.ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. , , , , ']); s; // ...
- Weka中数据挖掘与机器学习系列之Weka系统安装(四)
能来看我这篇博客的朋友,想必大家都知道,Weka采用Java编写的,因此,具有Java“一次编译,到处运行”的特性.支持的操作系统有Windows x86.Windows x64.Mac OS X.L ...
- 第三组 通信一班 030 OSPFv2、OSPFv3综合实验
一. 实验目的 掌握 OSPFv2. OSPFv3 的配置方法 掌握在帧中继环境下OSPFv2. OSPFv3 的配置方法 掌握 OSPFv2. OSPFv3 NSSA 的配置方法 ...
- [Oracle][RAC]Oracle RAC环境里打OCW上的个别Patch,然后Rollback,发现OCW也被Rollback掉了
对于Oracle RAC来说,存在着DB层面的Patch,也存在着GI层面的Patch. 本文介绍的是,GI层面,打Patch----> rollback 的动作之后,原来的OCW被Rollba ...
- 阶段01Java基础day16集合框架02
16.01_集合框架(去除ArrayList中重复字符串元素方式1) A:案例演示 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同) 思路:创建新集合方式 /** * A:案例演示 ...
- be动词的形式和用法
Be动词的形式: be, is, am, are, was, were, being, been 1.The man is back 2.They are back 3.He was back 4.T ...
- Qml和C++开发的学生信息管理软件一
一个月前接触到了Qml,也做过一些练习,但只能实现动画和简单的布局功能,逻辑部分和数据处理很难上手,看到许多人将C++和结合起来,Qml负责界面设计,C++实现逻辑处理,但将C++注册到 Qml中一直 ...
- cocos-lua3.17 cocos studio lua动画使用
这里只贴具体使用代码,资源请使用自己的. 这里的资源是cocos studio导出的lua文件,其中就有root和动画 function GameLayer:playLhAni() local ani ...