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)在性能测试中属于压力测试的一个子集.指的是在某一瞬间或者多个频次下用户数和压力陡然增加的场景. 为了验证我们的网站在访问用户急剧增加的情况下,或者短时间内反 ...
随机推荐
- React文档(十一)提升state
经常有些组件需要映射同一个改变的数据.我们建议将共用的state提升至最近的同一个祖先元素.我们来看看这是怎样运作的. 在这一节中,我们会创建一个温度计算器来计算提供的水温是否足够沸腾. 我们先创建一 ...
- php 添加环境变量
1.php添加环境变量主要为了能在 cmd和软件的客户端用php来运行 首先我们要做的第一步: 添加环境变量(记住php.exe的路径,然后再环境变量中编辑path 多个用逗号分隔开,保存重启电脑) ...
- 布局神器 display:flex;
布局神器 display:flex; 2009年,W3C提出了一种新的方案--Flex布局,可以简便.完整.响应式地实现各种页面布局.目前已得到所有现在浏览器的支持. 一.Flex布局是什么? Fle ...
- iOS分类底层实现原理小记
摘要:iOS分类底层是怎么实现的?本文将分如下四个模块进行探究分类的结构体编译时的分类分类的加载总结本文使用的runtime源码版本是objc4-680文中类与分类代码如下//类@interfaceP ...
- TreeTagger
大家都知道TreeTagger是一个用于词性标注和词型还原的工具,它的返回结果由三部分组成:目标词汇,词性,原形.那该工具是怎样判断目标词汇的词性的呢?又是怎样得到目标词汇的原形的呢?本文就是从这两个 ...
- sql存储过程编程带事务
CREATE PROCEDURE [dbo].[存储过程名字] @错误参数_ErrorCode int output, @参数1 int, @参数2 varchar(20), @参数3 varchar ...
- Python中的yield生成器的简单介绍
Python yield 使用浅析(整理自:廖 雪峰, 软件工程师, HP 2012 年 11 月 22 日 ) 初学 Python 的开发者经常会发现很多 Python 函数中用到了 yield 关 ...
- VSTO:使用C#开发Excel、Word【11】
编程用户定义的功能Excel可以创建可在Excel公式中使用的用户定义的函数. 开发人员必须创建一种称为XLL的特殊类型的DLL. Excel还允许您在VBA中编写可在Excel公式中使用的自定义函数 ...
- Homework 2.0
一.第一题,要求是输入不同的字符的时候输出不同的结果,这道题主要是运用输入和输出语言还有判断语句,分别使用switch和if else来进行输入字符的判断,本体比较简单,注意定义输入变量的类型为cha ...
- 禁止WORDPRESS站内搜索的方法
如果我们希望禁止站内搜索,毕竟会是的MYSQL负担加重,我们可以禁止掉,然后在使用第三方搜索组件.比如用百度站内搜索或者360站内搜索. function fb_filter_query( $quer ...