参考案例:(本位使用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 简单使用的更多相关文章

  1. EasyMock入门

    这是一个JavaProject,有关EasyMock用法详见本文测试用例 首先是用到的实体类User.java package com.jadyer.model; public class User ...

  2. [置顶] EasyMock的简单使用

    EasyMock总览 下面,我将讲述如何使用JUnit和EasyMock框架来进行单元测试. 在现实情况下,我们通常是在一些类里使用另外的一些类.在进行真正的测试之前,你可能需要做很多的工作,比喻说安 ...

  3. 使用EasyMock对Servlet进行简单的测试

    这是一个WebProject,但不需配置web.xml,因为EasyMock用不上它 首先是用到的实体类User.java package com.jadyer.model; public class ...

  4. 利用EasyMock生成数据库连接简单测试示例

    package demo.mock; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.Re ...

  5. 08.利用Easymock测试简单的servlet

    1.首先导入需要使用的servlet的jar包 接下来我们编写一个登陆的servlet package com.fjnu.service; import java.net.HttpRetryExcep ...

  6. easymock+junit+spring学习·

    Easymock学习                                Author:luojie 1.       Easymock简介 EasyMock 是一套通过简单的方法对于指定的 ...

  7. easymock入门贴

    from:http://macrochen.iteye.com/blog/298032 关于EasyMock常见的几个问题, 这里(http://ozgwei.blogspot.com/2007/06 ...

  8. 使用 EasyMock 更轻松地进行测试

    from:http://www.ibm.com/developerworks/cn/java/j-easymock.html 测试驱动开发是软件开发的重要部分.如果代码不进行测试,就是不可靠的.所有代 ...

  9. EasyMock 使用方法与原理剖析

    from:http://www.ibm.com/developerworks/cn/opensource/os-cn-easymock/ Mock 方法是单元测试中常见的一种技术,它的主要作用是模拟一 ...

随机推荐

  1. ELK使用1-Elasticsearch使用

    一.es 1.通过curl命令获取es进群信息 a.curl -i(设置协议的头信息) -XGET 'http:192.168.30.41:9200/_count' b.查看集群状态 curl -XG ...

  2. P1063 能量项链 区间dp

    题目描述 在MarsMars星球上,每个MarsMars人都随身佩带着一串能量项链.在项链上有NN颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一 ...

  3. Python交互图表可视化Bokeh:5 柱状图| 堆叠图| 直方图

    柱状图/堆叠图/直方图 ① 单系列柱状图② 多系列柱状图③ 堆叠图④ 直方图 1.单系列柱状图 import numpy as np import pandas as pd import matplo ...

  4. 20165220 Java第五周学习总结

    教材学习内容总结 1.try—catch语句:Java用try—catch语句来处理异常.将可能出现的异常操作放在try中,当try出现异常时,此部分立刻结束运行,转向执行catch部分.一个try- ...

  5. 牛客练习赛 26 C题 城市规划【贪心】

    <题目链接> 题目描述 小a的国家里有n个城市,其中第i和第i - 1个城市之间有无向道路连接,特殊的,第1个城市仅与第2个城市相连为了减轻道路维护负担,城市规划局局长MXT给出了m个要求 ...

  6. Python之路【第八篇】:面向对象的程序设计

    阅读目录 一 面向对象的程序设计的由来二 什么是面向对象的程序设计及为什么要有它三 类和对象3.1 什么是对象,什么是类3.2 类相关知识3.3 对象相关知识3.4 对象之间的交互3.5 类名称空间与 ...

  7. vue笔记-模板,计算属性,class与style,data属性

    数据和方法 1:只有当实例被创建时 data 中存在的属性才是响应式的,也可以预定义一些空的属性,唯一的意外就是Object.freeze(obj),这会阻止修改现有的属性;也就是说一个数据在放到根实 ...

  8. 浅谈solr

    Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引:也可以通过Http Get操 ...

  9. 使用vue iview遇到的一些问题

    使用阿里巴巴图标库 下载代码 这五个文件 iconfount.css 如果导入多个文件记得把@font-face复制到里面 改成./路径 //main.js import './assets/font ...

  10. 伪类实现特殊图形,一个span加三角形

    题目如图: 实现思路: 伪类+三边透明的三角形实现 代码: <span class="wei">wei</span> .wei{ display: inli ...