【JUnit】EasyMock用法总结
使用EasyMock的总体步骤
1、生成Mock接口
- IService mockService = EasyMock.createMock("name", IService.class);
如果要mock对象,而不是接口,应该使用class extension:org.easymock.classextension.EasyMock
如果要mock多个接口,最好使用MockControl来管理:
- IMocksControl control = EasyMock.createControl();
- IService1 mockObj1 = control.createMock(IService1.class);
- IService2 mockObj2 = control.createMock(Iservice2.class);
2、设置预期行为
如果返回值是void:
- mockService.doVoidMethod();
- EasyMock.expectLastCall();// 最新版本的EasyMock可以忽略此句
如果要求抛出异常:
- EasyMock.expectLastCall().andThrow(
- new MyException(new RuntimeException())).anyTimes();
如果返回值不是void:
- EasyMock.expect(mockService.doSomething(isA(Long.class), isA(Report.class),
- isNull(Report.class))).andReturn("return string").anyTimes();
上例方法中传入3个参数,分别是Long、Report、null——注意,如果参数是基本类型long,则使用EasyMock.anyLong()
传入参数还可以定义为具体的对象,而不是类。
3、将Mock对象切换到replay状态
- EasyMock.replay(mockService);
如果是用MockControl来管理:
- control.replay();
4、测试
- bo.setService(mockService);
- bo.doSomething();
5、验证Mock对象的行为
- EasyMock.verify(mockService);
如果是用MockControl来管理:
- control.verify();
expect()注意事项
期望传入参数为基本类型时
用expect来设置mock方法的期望调用方式时,如果使用到基本类型,但是又不要基本类型的值,
不能用:EasyMock.isA(Long.class)
要用:EasyMock.anyLong()
期望传入参数可能为null时
如果传入的参数可能为null,如果用
- isA(String.class)
而实际传入的是null,则会报错 (isA(java.lang.String), <any>): expected: 1, actual: 0
应该用:
- or(isA(String.class), isNull())
如果返回结果在运行时才能确定
很可能某个方法期望的返回结果不是固定的,例如根据传入参数不同而不同;这时需要使用andAnswer():
- EasyMock.expect(mockService.execute(EasyMock.anyInt())).andAnswer(new IAnswer<Integer>() {
- public Integer answer() throws Throwable {
- Integer count = (Integer) EasyMock.getCurrentArguments()[0];
- return count * 2;
- }
- });
注意,通过EasyMock.getCurrentArguments()可以获取传入参数!
times()
常见问题
java.lang.IllegalStateException: 2 matchers expected, 1 recorded.
可能是设置mock方法的期望调用方式时,既使用了isA的方式来指定参数,又使用了一个具体值来作为参数
比如这样写:
- expect(mockEmployeeRepository.findByDepartmentAndSpecification("HR",
- isA(EmployeeSearchSpecification.class)).andReturn(emplooyees);
正确的写法:——用eq(具体值)
- expect(mockEmployeeRepository.findByDepartmentAndSpecification(eq("HR"),
- isA(EmployeeSearchSpecification.class)).andReturn(employees);
【JUnit】EasyMock用法总结的更多相关文章
- 关于intellij IDEA 上junit的用法
话说,最近正在看视频学java.里面有个叫做junit的东西很有用.但是实话说我摆弄了半天都没弄明白. 今天呢通过一些资料,终于弄清楚了junit的大致用法,这里写出来,用以分享和备忘. 首先,环境和 ...
- JUnit基本用法
JUnit的一些注意事项: 测试方法必须使用@Test修饰 测试方法必须使用public void进行修饰,不能带参数 一般使用单元测试会新建一个test目录存放测试代码,在生产部署的时候只需要将te ...
- Wiser的Junit测试用法
package org.jbpm.process.workitem.email; import static org.junit.Assert.assertEquals; import static ...
- java的Junit的用法(转发)
初级https://blog.csdn.net/andycpp/article/details/1327147/ 中级https://blog.csdn.net/andycpp/article/det ...
- JUNIT的用法简要总结
JUNIT是一个单元测试框架,可以用来测试我们程序中的某个模块是否工作正常.而不需要去写一个MAIN函数来测试,方便快捷. 经过对博客http://blog.csdn.net/andycpp/arti ...
- EasyMock入门
这是一个JavaProject,有关EasyMock用法详见本文测试用例 首先是用到的实体类User.java package com.jadyer.model; public class User ...
- JUnit3 结合一个除法的单元测试说明Assert.fail()的用法
之前一篇博文(JUnit基础及第一个单元测试实例(JUnit3.8))介绍了用JUnit做单元测试的基本方法,并写了一个简单的类Calculator,其中包含了整型加减乘除的简单算法. 本文通过完善其 ...
- Junit 入门使用教程
1.Junit 是什么? JUnit是一个Java语言的单元测试框架.它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个JU ...
- Junit基本使用
Junit基本用法 1.创建Junit Test Case 2.基本使用(以oracle数据库操作为例) package com.csit.adminsystem1.tests; import sta ...
随机推荐
- 【转】shell脚本调试(bash trap support bashdb )
原文网址:http://zhu8337797.blog.163.com/blog/static/170617549201122512712136/ 命 令 选 项 功 能 bash –x 脚本名 回显 ...
- 关于Xcode的项目文件夹
当我们在打开的项目中,对某个文件夹 Show in Finder的时候,发现对代码的分类文件夹没有全在一堆,在项目中明明对代码分了类,为什么在Finder中没有文件夹?? 这是因为,Xcode项目中的 ...
- NoSQL架构实践(一)——以NoSQL为辅
前面<为什么要使用NoSQL>和<关系数据库还是NoSQL数据库>两篇从大体上介绍了为什么要用NoSQL,何时该用NoSQL.经常有朋友遇到困惑,看到NoSQL的介绍,觉得很好 ...
- CURL 错误码 中文翻译
这几天用CURL做下载系统,经常会遇到一些问题,很多的错误还是和CURL的option有关.现在把这些错误码贴过来,方便查看一下. 错误代码列表 CURLE_UNSUPPORTED_PROTOCOL ...
- 【PHP入门到精通】:Ch03:PHP语言基础
1, PHP风格 这里为了显示代码把"<"和">"和key值以空格分开了,实际书写时切记不要将其分开: (1) < ?php ? >: ...
- head 命令
head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾. 1.命令格式: hea ...
- VB6.0编程笔记——(2)开发环境准备&学习前导入
工欲善其事必先利其器,着手开始学习写代码之前,我们需要先准备好需要用到的工具.这篇文章会教大家部署好环境,同时会告知前期我们需要知道的一点内容(可以不用特别理解,只要记住用法就行,后续会深入展开介绍) ...
- 关于COUNT STOPKEY的工作机制(转载)
SQL> select rownum rn ,a.* from cnmir.ew_auctions a where rownum<50000; Execution Plan-------- ...
- windows下ncl生成tiff图(案例)
一:安装软件和准备数据 1.需要安装Vapor(注意安装路径不要存在空格) 注:版本2.4.2及以后 2.安装NCL,方法见http://www.cnblogs.com/striver-zhu/p/4 ...
- Scrum角色
产品负责人(Product Owner)的职责如下: 确定产品的功能. 决定发布的日期和发布内容. 为产品的profitability of the product (ROI)负责. 根据 ...