EasyMock 简单使用
参考案例:(本位使用markdown编写)
https://www.ibm.com/developerworks/cn/opensource/os-cn-easymock/
https://www.yiibai.com/easymock/
git.oschina实例:https://gitee.com/lhhTestTool/LhhEasyMock # LhhEasyMock
# EasyMock
EasyMock便于无缝地创建模拟对象。它使用Java反射,以创造为给定接口的模拟对象。模拟对象是什么,只不过是代理的实际实现。
考虑如:股票服务的情况下,它返回一个股票价格的详细信息。在开发过程中,实际的库存服务不能被用于获得实时数据。
因此,我们需要一个虚拟的股票实施服务。简易模拟可以很容易理解顾名思义这样 # EasyMock的好处
* 不用手写 - 没有必要通过自己编写的模拟对象。
* 重构安全 - 重构接口方法的名称或重新排序的参数不会破坏测试代码在运行时创建。
* 返回值支持 - 支持返回值。
* 异常支持 - 支持例外/异常。
* 命令检查支持 - 支持检查命令方法调用。
* 注释支持 - 支持使用注解创建。 # EasyMock架包 <dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<version>RELEASE</version>
</dependency> # 阶段介绍 ## 数据准备阶段
```
//创建一个要测试的组合对象
Portfolio portfolio = new Portfolio(); //创建将要添加到组合中的数据(股票)列表。
List<Stock> stocks = new ArrayList<Stock>();
Stock googleStock = new Stock("1","Google", 10);
Stock microsoftStock = new Stock("2","Microsoft",100); stocks.add(googleStock);
stocks.add(microsoftStock); ``` ## Record 阶段
``` // Mock的Record 阶段 -》 在这个阶段,Record 状态,用户可以设定 Mock 对象的预期行为和输出,这些对象行为被录制下来,保存在 Mock 对象中
//创建提供数据(股票)服务的模拟对象
StockService stockService = EasyMock.createMock(StockService.class); //模拟数据(股票)服务的行为,以返回各种方法的价值。设定return的返回值
EasyMock.expect(stockService.getPrice(googleStock)).andReturn(50.00);
EasyMock.expect(stockService.getPrice(microsoftStock)).andReturn(1000.00); ``` ## Replay 阶段
`replay()`,将 Mock 对象的状态置为 `Replay 状态`。
```
//Mock的Replay 阶段 -》 在这个阶段,在使用 Mock 对象进行实际的测试前,我们需要将 Mock 对象的状态切换为 Replay。在 Replay 状态,Mock 对象能够根据设定对特定的方法调用作出预期的响应。
EasyMock.replay(stockService);
//在业务处理组合中增加数据项
portfolio.setStocks(stocks);
//在业务处理组合中增加数据服务
portfolio.setStockService(stockService); ``` ## 测试调用阶段 ```
//实际处理逻辑
double marketValue = portfolio.getMarketValue(); //验证数据处理 10*50.00 + 100* 1000.00 = 500.00 + 100000.00 = 100500
System.out.println("Market value of the portfolio: "+ marketValue); ``` ## EasyMock 验证阶段(非必须)
```
//Mock的验证阶段 (验证调用过程正常完成)
EasyMock.verify(stockService);
``` # EasyMock 方法汇总 ## EasyMock
构建和初始化 1.EasyMock静态方法createMock
> 使用 EasyMock 动态构建 Mock 对象 2.EasyMock静态方法createControl
> 能创建一个接口 IMocksControl 的对象,该对象能创建并管理多个 Mock 对象。
如果需要在测试中使用多个 Mock 对象,我们推荐您使用这一机制,
因为它在多个 Mock 对象的管理上提供了相对便捷的方法。 > 如果您要模拟的是一个具体类而非接口,那么您需要下载扩展包 `EasyMock Class Extension 2.2.2`。
在对具体类进行模拟时,您只要用 `org.easymock.classextension.EasyMock` 类中的静态方法代替 `org.easymock.EasyMock` 类中的静态方法即可。 3,replay(mockResultSet) or replay();
> 将 Mock 对象切换到 Replay 状态 两种使用方式:
eg
1.如果构建对象`IMocksControl`则调用它的`.replay()`;
2.如果构建对象为具体的我们业务测试对象,则调用`EasyMock.replay(xxx);`(本例调用这个) 4.verify(mockResultSet) or verify();
> 对 Mock 对象的行为进行验证 两种使用方式:
eg
1.如果构建对象`IMocksControl`则调用它的`.verify()`;
2.如果构建对象为具体的我们业务测试对象,则调用`EasyMock.verify(xxx);`(本例调用这个) 5.reset
> 为了避免生成过多的 Mock 对象,EasyMock 允许对原有 Mock 对象进行重用。要对 Mock 对象重新初始化,我们可以采用 reset 方法 两种使用方式:
eg
1.如果构建对象`IMocksControl`则调用它的`.reset ()`;
2.如果构建对象为具体的我们业务测试对象,则调用`EasyMock.reset (xxx);`(本例调用这个) # IExpectationSetters
对 Mock 对象行为的添加和设置是通过接口 IExpectationSetters 来实现的
两种类型的输出:(1)产生返回值;(2)抛出异常。 1.IExpectationSetters<T> andReturn(T value);
> 设定返回值 2.void andStubReturn(T value);
> 有时,某个方法的调用总是返回一个相同的值,为了避免每次调用都为 Mock 对象的行为进行一次设定 3.IExpectationSetters<T> andThrow(Throwable throwable);
> 设定预期抛出异常 4.void andStubThrow(Throwable throwable);
> 设定抛出默认异常的函数 与 `andStubReturn` 类似 5.IExpectationSetters<T> times(int count);
> 该方法可以 Mock 对象方法的调用次数进行确切的设定 eg:
`andReturn("My return value").times(3);` 6. times(int minTimes, int maxTimes)
> 该方法最少被调用 minTimes 次,最多被调用 maxTimes 次 7.atLeastOnce()
> 该方法至少被调用一次。 8. anyTimes()
> 该方法可以被调用任意次。 eg:
`expect(mockResult.close()).times(3, 5);` 9.其他方式 参考文章 https://www.ibm.com/developerworks/cn/opensource/os-cn-easymock/
https://www.yiibai.com/easymock/
EasyMock 简单使用的更多相关文章
- EasyMock入门
这是一个JavaProject,有关EasyMock用法详见本文测试用例 首先是用到的实体类User.java package com.jadyer.model; public class User ...
- [置顶] EasyMock的简单使用
EasyMock总览 下面,我将讲述如何使用JUnit和EasyMock框架来进行单元测试. 在现实情况下,我们通常是在一些类里使用另外的一些类.在进行真正的测试之前,你可能需要做很多的工作,比喻说安 ...
- 使用EasyMock对Servlet进行简单的测试
这是一个WebProject,但不需配置web.xml,因为EasyMock用不上它 首先是用到的实体类User.java package com.jadyer.model; public class ...
- 利用EasyMock生成数据库连接简单测试示例
package demo.mock; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.Re ...
- 08.利用Easymock测试简单的servlet
1.首先导入需要使用的servlet的jar包 接下来我们编写一个登陆的servlet package com.fjnu.service; import java.net.HttpRetryExcep ...
- easymock+junit+spring学习·
Easymock学习 Author:luojie 1. Easymock简介 EasyMock 是一套通过简单的方法对于指定的 ...
- easymock入门贴
from:http://macrochen.iteye.com/blog/298032 关于EasyMock常见的几个问题, 这里(http://ozgwei.blogspot.com/2007/06 ...
- 使用 EasyMock 更轻松地进行测试
from:http://www.ibm.com/developerworks/cn/java/j-easymock.html 测试驱动开发是软件开发的重要部分.如果代码不进行测试,就是不可靠的.所有代 ...
- EasyMock 使用方法与原理剖析
from:http://www.ibm.com/developerworks/cn/opensource/os-cn-easymock/ Mock 方法是单元测试中常见的一种技术,它的主要作用是模拟一 ...
随机推荐
- 043 hive数据同步到mysql
一:意义 1.意义 如果可以实现这个功能,就可以使用spark代替sqoop,功能程序就实现这个功能. 二:hive操作 1.准备数据 启动hive 否则报错,因为在hive与spark集成的时候,配 ...
- day43 mysql 基本管理,[破解密码以及用户权限设置]以及慢日志查询配置
配置文件:详细步骤, 1,找到mysql的安装包,然后打开后会看到一个my.ini命名的程序,把它拖拽到notepad++里面来打开,(应该是其他文本形式也可以打开,可以试一下),直接拖拽即可打开该文 ...
- day16 函数的用法:内置函数,匿名函数
思维导图需要补全 : 一共有68个内置函数: #内置:python自带 # def func(): # a = 1 # b = 2 # print(locals()) # print(globals( ...
- day12 函数的使用方法:初识迭代器和生成器
生成器和迭代器比装饰器简单多了... 这是老师的博客地址: http://www.cnblogs.com/Eva-J/articles/7213953.html 前情回顾: #装饰器: # 在不修改一 ...
- spring mvc中的service和controller中读取不到properties值
根据web.xml读取配置文件中的顺序来看 controller层和service层来自于spring mvc.xml中读取,所以必须要在spring mvc.xml中配置读取资源文件夹方式
- 实现Java简单继承
面向对象练习-简单继承 一.完成教师类的创建 说明: id 代表身份证号 name 表示姓名 birth 表示出生日期 title 表示职称(讲师,副教授,教授等) 二.完成学生类的创建 说明: ma ...
- JavaEE 之 Mybatis
1.Mybatis a.定义:MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架 b.步骤: ①在src下创建 SqlMapConfig.xml 及 datasource.pr ...
- 146. 大小写转换 II
146. Lowercase to Uppercase II Description Implement an upper method to convert all characters in a ...
- csdn 站点使用
大学时使用csdn下载软件资源,最终csdn成为一个it中很重要站点,csdn的运营方式值得思考.
- BZOJ.4650.[NOI2016]优秀的拆分(后缀数组 思路)
BZOJ 洛谷 令\(st[i]\)表示以\(i\)为开头有多少个\(AA\)这样的子串,\(ed[i]\)表示以\(i\)结尾有多少个\(AA\)这样的子串.那么\(Ans=\sum_{i=1}^{ ...