Java开发过程中需要使用EasyMock做单元测试,今天上手使用了一下,记录之!

开发环境:

JDK7.0+MyEclipse10+EasyMock3.3.1+Win7+JUnit4

1) 接口IAlgorithm.java

package com.wicresoft.EKA;public interface IAlgorithm {public int Add(int x,int y);public int Mul(int x,int y);
}

2) 实现接口

package com.wicresoft.EKA;public class Algorithm implements IAlgorithm {public int Add(int x,int y){return x + y;}public int Mul(int x,int y){return x * y;}
}

3) 调用者

package com.wicresoft.EKA;public class Calcutor {private IAlgorithm agent;public Calcutor(IAlgorithm agent){this.agent = agent;}public int CalcAdd(int x,int y){return agent.Add(x, y);}
}

4) 单元测试

package com.wicresoft.EKA.Test;
import static org.junit.Assert.*;
import org.easymock.EasyMock;
import org.easymock.EasyMockSupport;
import org.junit.Test;
import com.wicresoft.EKA.*;
public class AlgorithmTest extends EasyMockSupport {
 @Testpublic void testAdd() {Algorithm algorithm = new Algorithm();int expected = 10;int actual = algorithm.Add(3, 7);assertEquals(expected, actual);}@Testpublic void testMul() {try{int x = 3;int y = 4;int z = 7;IAlgorithm mock = createMock(IAlgorithm.class);Calcutor calc = new Calcutor(mock);EasyMock.expect(calc.CalcAdd(x,y)).andReturn(z).anyTimes();EasyMock.replay(mock);EasyMock.verify(mock);}catch(Exception e){e.printStackTrace();}}
}

注:

1)这里有一个TestAdd是使用MyEclipse的JUnit的框架写的普通单元测试,TestMul是通过EasyMock写的单元测试;

2)引用jar包如下:

3) 运行单元测试

总结:

1.关于EasyMock的详细使用,点击:http://easymock.org/

2.如果发生 java.lang.NoClassDefFoundError异常

java.lang.NoClassDefFoundError: org/objenesis/ObjenesisHelperat org.easymock.internal.ObjenesisClassInstantiator.newInstance
...

需要引用objenesis-1.1.jar包,下载地址:http://download.csdn.net/download/dreamStronger/3074415
3.如果发生java.lang.AssertionError异常

java.lang.AssertionError: Expectation failure on verify:Algorithm.Add(3, 4): expected: 1, actual: 0
...

则注意在方法调用后面调用anyTimes();函数如果需要expect的方法没有返回值, 应该这样写: 先执行mock的要调用的方法, 然后调用EasyMock.expectLastCall().anyTimes();
4.Recored - Replay - Verify 模型

record-replay-verify 模型容许记录mock对象上的操作然后重演并验证这些操作。这是目前mock框架领域最常见的模型,几乎所有的mock框架都是用这个模型,有些是现实使用如easymock,有些是隐式使用如jmockit。

Record

我们开始创建mock对象,并期望这个mock对象的方法被调用,同时给出我们希望这个方法返回的结果。这就是所谓的"记录mock对象上的操作", 同时我们也会看到"expect"这个关键字。 总结说,在record阶段,我们需要给出的是我们对mock对象的一系列期望:若干个mock对象被调用,依从我们给定的参数,顺序,次数等,并返回预设好的结果(返回值或者异常).

Replay

在replay阶段,我们关注的主要测试对象将被创建,之前在record阶段创建的相关依赖被关联到主要测试对象,然后执行被测试的方法,以模拟真实运行环境下主要测试对象的行为。

在测试方法执行过程中,主要测试对象的内部代码被执行,同时和相关的依赖进行交互:以一定的参数调用依赖的方法,获取并处理返回。我们期待这个过程如我们在record阶段设想的交互场景一致,即我们期望在replay阶段所有在record阶段记录的行为都将被完整而准确的重新演绎一遍,从而到达验证主要测试对象行为的目的。

 Verify

在verify阶段,我们将验证测试的结果和交互行为。

通常验证分为两部分,如上所示: 一部分是验证结果,即主要测试对象的测试方法返回的结果(对于异常测试场景则是抛出的异常)是否如预期,通常这个验证过程需要我们自行编码实现。另一部分是验证交互行为,典型如依赖是否被调用,调用的参数,顺序和次数,这部分的验证过程通常是由mock框架来自动完成,我们只需要简单调用即可。

在easymock的实现中,verify的部分交互行为验证工作,会提前在replay阶段进行:比如未记录的调用,调用的参数等。如果验证失败,则直接结束replay以致整个测试案例。

record-replay-verify 模型非常好的满足了大多数测试场景的需要:先指定测试的期望,然后执行测试,再验证期望是否被满足。这个模型简单直接,易于实现,也容易被开发人员理解和接受,因此被各个mock框架广泛使用。

最后,项目代码+libs包 下载地址:http://download.csdn.net/detail/afandaafandaafanda/8392209

EasyMock 单元测试相关推荐

  1. Android系统源码目录及功能介绍

    Android的移植按如下流程:     1.android linux 内核的普通驱动移植,让内核可以在目标平台上运行起来.     2.正确挂载文件系统,确保内核启动参数和 android 源代码 ...

  2. Android 8.0.0-r4源码目录结构详解

    Android的移植按如下流程: (1)android linux 内核的普通驱动移植,让内核可以在目标平台上运行起来. (2)正确挂载文件系统,确保内核启动参数和 android 源代码 syste ...

  3. Android 8源码目录结构详解

    |-  art // Android Runtime,一种App运行模式,区别于传统的Dalvik虚拟机,旨在提高Android系统的流畅性,包括以下目录 |-  benchmark // 程序测试基 ...

  4. Android 8.0目录介绍

    android的移植按如下流程: (1)android linux 内核的普通驱动移植,让内核可以在目标平台上运行起来. (2)正确挂载文件系统,确保内核启动参数和 android 源代码 syste ...

  5. Android 8.0学习(32)---Android 8.0源码目录结构详解

    Android 8.0源码目录结构详解 android的移植按如下流程:     (1)android linux 内核的普通驱动移植,让内核可以在目标平台上运行起来.     (2)正确挂载文件系统 ...

  6. Android 7 Nougat 源码目录结构

    |- art // Android Runtime,一种App运行模式,区别于传统的Dalvik虚拟机,旨在提高Android系统的流畅性,包括以下几个目录. |- benchmark // 程序测试 ...

  7. android7源码结构分析

    |- art // Android Runtime,一种App运行模式,区别于传统的Dalvik虚拟机,旨在提高Android系统的流畅性,包括以下几个目录. |- benchmark // 程序测试 ...

  8. 使用easymock做单元测试

    单元测试中经常会遇到一些比较难以测试的对象,比如调用外部接口 这个时候我们可以使用easymock手动构建一个对象 并设置返回值 具体做法 假设需要构造的对象为ObjectA class Object ...

  9. 单元测试 easymock_使用EasyMock更轻松地测试

    单元测试 easymock 测试驱动的开发是软件开发的重要组成部分. 如果未测试代码,则该代码已损坏. 所有代码都必须经过测试,理想情况下,应在模型代码之前编写测试. 但是有些事情比其他事情更容易测试 ...

最新文章

  1. python评委打分代码_STL案例—评委打分
  2. 马哥运维架构 第一周作业
  3. android 蓝牙打印格式,Android蓝牙打印格式排版
  4. .NET 6 中的HTTP 3支持
  5. 优麒麟这样的linux版本,百度网盘 Linux 版发布,搭配优麒麟运行更完美!
  6. 转载:给自己一个警示
  7. Xcode7 Xcode6 中添加pch文件
  8. SpringBoot2.X + SpringCache + redis解决乱码问题
  9. 算法:回溯十七 Combination Sum III挑选数组中规定个数元素的和为指定数
  10. Java中数据库模糊查询写法
  11. 没有对手的人生是孤单的
  12. Vue 单文件模板中覆盖引入库 CSS 样式
  13. 《Sre google运维解密》笔记
  14. java 图形检测_使用OpenCV[Java]检测简单几何图形
  15. linux 做路由器系统下载文件,用Linux系统做路由器
  16. How to Pronounce PROBABLY
  17. Ubuntu 22.04换清华源
  18. Computer Integrated Manu-facturing,简称CIM
  19. AT89C51与STC89C51与AT89S51区别,学单片机的请尽量不要用AT89C51芯片(过时而且额外要买贵的编程器)
  20. (三)Windows Server 2008 R2 无网卡驱动

热门文章

  1. 仿小米视频下滑视频动画效果
  2. 从0开始学习python7:Python中词频统计以及sort的排序用法
  3. 算法学习(九)之“宽度优先搜索”
  4. centos图形化磁盘文件管理_centos7图形化分区和ks文件分区的配置
  5. 商贸零售行业2021年投资策略:市场下沉、渠道效率升级,新品牌新业态乘风而起
  6. su: 无法设置组: 不允许的操作
  7. java数据集导出excel_使用Apache Poi将结果集从Java数据库导出到Excel
  8. python3GUI--翻译器-v2.0(附源码)
  9. pstack 安装linux_linux下的进程堆栈查看工具pstack
  10. python学习记录 day1