参考案例:(本位使用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. Python 高级面向对象

    一.字段 1.字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同. a.普通字段属于对象(实例变量) b.静态字段属于类(类变量) 二.属性 对于属性,有以 ...

  2. Python交互图表可视化Bokeh:7. 工具栏

    ToolBar工具栏设置 ① 位置设置② 移动.放大缩小.存储.刷新③ 选择④ 提示框.十字线 1. 位置设置 import numpy as np import pandas as pd impor ...

  3. STC15W408AS简单使用教程-简单的光强检测!

    第一步:搭建开发环境 安装最新版本的STC_ISP程序烧录软件,链接:http://pan.baidu.com/s/1slLPnOD 密码:6bov 安装keil C51的51系列单片机集成IDE软件 ...

  4. TF之RNN:基于顺序的RNN分类案例对手写数字图片mnist数据集实现高精度预测—Jason niu

    import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data mnist = input_dat ...

  5. C. A Mist of Florescence ----- Codeforces Round #487 (Div. 2)

    C. A Mist of Florescence time limit per test 1 second memory limit per test 256 megabytes input stan ...

  6. HDU 2242 考研路茫茫—空调教室 (边双连通+树形DP)

    <题目链接> 题目大意: 给定一个连通图,每个点有点权,现在需要删除一条边,使得整张图分成两个连通块,问你删除这条边后,两联通块点权值和差值最小是多少. 解题分析: 删除一条边,使原连通图 ...

  7. TensorFlow下利用MNIST训练模型并识别自己手写的数字

    最近一直在学习李宏毅老师的机器学习视频教程,学到和神经网络那一块知识的时候,我觉得单纯的学习理论知识过于枯燥,就想着自己动手实现一些简单的Demo,毕竟实践是检验真理的唯一标准!!!但是网上很多的与t ...

  8. Ignatius and the Princess III HDU - 1028 -生成函数or完全背包计数

    HDU - 1028 step 1:初始化第一个多项式 也就是 由 1的各种方案 组 成 的多项式 初始化系数为 1.临时区 temp初始化 为 0 step 2:遍历后续的n - 1 个 多项式 , ...

  9. Android-自定义View前传-View的三大流程-Layout

    Android-自定义View前传-View的三大流程-Layout 参考 <Android开发艺术探索> https://github.com/hongyangAndroid/FlowL ...

  10. selenium 安装 以及相关环境

    在cmd中安装简单, pip install selenium 一键安装 如果需要  chromedriver   还需要安装相对应的   版本 看到网上基本没有最新的chromedriver与chr ...