一、EasyMock 使用动态代理实现模拟对象创建,一般可以满足以下测试需求

1、要测试的模块依赖于其它自己控制不了的模块,如第三方服务,其它组员在开发的服务等,它们都没办法配合你来测试;

2、涉及到数据库操作,但当时条件连接不了数据库或你不想将自己的测试结果改动到数据库;

3、模块依赖于spring容器注入其它服务实例,但你又不想启动spring容器。

总之,EasyMock能帮我们模拟出任何我们想要的支持对象,并且我们可以使用这些对象进行逻辑操作

二、具体使用方法

1、模拟成员变量

EasyMock.createMock(要模拟的成员变量类型);

2、设定模拟成员的函数行为

1)有返回值

Easymock.expect(模拟成员的某个要模拟的函数).andReturn(期待的返回值)

2)没返回值

首先模拟成员调用要模拟的函数,然后在后面跟上一句:EasyMock.expectLastCall(),如果希望为该函数加上一个返回,可以用:

EasyMock.expectLastCall().andAnswer(new IAnswer<任何类型>(){
  public String answer() throws Throwable {
    log.info(EasyMock.getCurrentArguments()[0]);//打印参数,以确定传参是否准确([0]表示第一个参数)
    return 作何类型;
  }
});

因为完全没返回又没日志输出的时候,你可能很难确定这个函数的操作结果是什么

3、模糊参数

有时候要模拟的函数的参数是在程序运行过程中调用的,参数值来自于程序执行结果,这时可以用模糊参数来解决,模糊参数有:

isA、isNull、anyInt等

4、开始测试

EasyMock.replay(模拟成员);

三、实例

1、要测试的类

public class UserServiceImpl{ 
  private UserDao dao; 
  public List<String> queryNames(String[] ids) throws Exception{ 
    try{ 
      return dao.getNames(ids); 
    }catch(Exception e){ 
      throw e; 
    } 
    return null; 
  } 
}

该类依赖UserDao,但UserDao可能还没实现,或要靠spring容器来注入

2、测试代码

@Test 
public void test() {

  String[] ids = {'1','2','3'};

  List<String> returnNams = Arrays.asList("a,b,c".split(","));

  UserDao userDaoMock = EasyMock.createMock(UserDao.class);//创建模拟成员

  EasyMock.expect(userDaoMock.getNames(ids )).andReturn(returnNams);

EasyMock.replay(userDaoMock );//重放Mock对象

  UserServiceImpl userServiceImpl = new UserServiceImpl();

  userServiceImpl .queryNames(ids);//目标类调用目标方法

  EasyMock.verify(userDaoMock );//验证Mock对象

}

EasyMock 模拟对象测试的更多相关文章

  1. 模拟对象测试——EasyMock

    一.EasyMock 使用动态代理实现模拟对象创建,一般可以满足以下测试需求 1.要测试的模块依赖于其它自己控制不了的模块,如第三方服务,其它组员在开发的服务等,它们都没办法配合你来测试: 2.涉及到 ...

  2. 使用模拟对象(Mock Object)技术进行测试驱动开发

    敏捷开发 敏捷软件开发又称敏捷开发,是一种从上世纪 90 年代开始引起开发人员注意的新型软件开发方法.和传统瀑布式开发方法对比,敏捷开发强调的是在几周或者几个月很短的时间周期,完成相对较小功能,并交付 ...

  3. [Test] 单元测试艺术(2) 打破依赖,使用模拟对象,桩对象,隔离框架

    在上节中,完成了第一个单元测试,研究了各种特性,在本节,将介绍一些更实际的例子.SUT依赖于一个不可操控的对象,最常见的例子是文件系统,线程,内存和时间等. 本系列将分成3节: 单元测试基础知识 打破 ...

  4. springBoot单元测试-模拟MVC测试

    1)模拟mvc测试,和基础测试是一样的, 都需要在pom文件中引入junit的支持. 略 2)编写测试类 Application1TestMVC 在类头上除啦加入之前的@RunWith(SpringR ...

  5. 《Entity Framework 6 Recipes》中文翻译系列 (46) ------ 第八章 POCO之领域对象测试和仓储测试

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 8-8  测试领域对象 问题 你想为领域对象创建单元测试. 这主要用于,测试特定的数 ...

  6. 好用的在线HTTP接口测试 - HTTP GET/POST模拟请求测试工具-ApiPost

    现在的模拟发送请求插件很多比如老外的postman等,但亲测咱们国内的 ApiPost 更好用一些,因为它不仅可以模拟发送get.post.delete.put请求,还可以导出文档,支持团队协作也是它 ...

  7. 前端如何使用easy-mock模拟接口

    1. 如何使用easy-mock // 获取 easy-mock 的模拟数据 getData () { // 开发环境使用 easy-mock 数据,正式环境使用 json 文件 if (proces ...

  8. [python学习篇][书籍学习][python standrad library][内置类型]对象测试真值,布尔值操作, 比较操作

    几乎所有对象都可以比较.测试真值.转换为字符串(其实就是用repr()函数,或略有差异的str()函数来转换) 1 对象是否为真 任何对象都可以测试真值,用于if或while的条件或下面布尔运算的操作 ...

  9. jmeter模拟spike测试(尖峰测试)

    概述 尖峰测试(Spike testing)在性能测试中属于压力测试的一个子集.指的是在某一瞬间或者多个频次下用户数和压力陡然增加的场景. 为了验证我们的网站在访问用户急剧增加的情况下,或者短时间内反 ...

随机推荐

  1. codeforces727E. Games on a CD

    题意:给一个n*k的循环字符串可能从任意地方断开,然后m个长度k的字符串,问你能不能用下面的字符串(每个最多用一次)构成上面的字符串,能循环移位 题解:对下面的串建ac自动机,记录字符串最后一个位置, ...

  2. less的基本语法

    参考:http://old.zhufengpeixun.cn/qianduanjishuziliao/mobileDevelopment/2016-07-22/528.html

  3. prefixspan python

    from:https://github.com/chuanconggao/PrefixSpan-py API Usage Alternatively, you can use the algorith ...

  4. 微信小程序textarea组件在fixed定位中随页面滚动

    如果 textarea 是在一个 position:fixed 的区域,需要显示指定属性 fixed 为 true https://developers.weixin.qq.com/miniprogr ...

  5. ubuntu16.04中设置python3

    执行: sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100 sudo update-alter ...

  6. rest_framework 之视图

    1. 继承ModelSerilizer,直接指定要序列化的表模型 MySerializers.py from app import models # 继承ModelSerilizer,直接指定要序列化 ...

  7. SVG路径PATH

    SVG路径PATH 在使用之前建议下个PS或者FLASH玩玩里面的钢笔工具(FLASH里的钢笔工具比PS里的好用) PATH用到的指令: M----(X Y):移动到 Z----(none):关闭路径 ...

  8. ip本地查询

    下载地址:http://www.cz88.net/ http://www.crsky.com/soft/2611.html QQWry.dat文件在结构上分为3块:文件头,记录区,索引区. 一般我们要 ...

  9. C语言如何在可变参数函数中使用printf?

    我要将printf外面再包上一层:void fun(const char* fmt,...) {........printf(fmt,...);........}这种函数怎么写? 对比下printf与 ...

  10. 唯一分解定理(以Minimun Sum LCM UVa 10791为例)

    唯一分解定理是指任何正整数都可以分解为一些素数的幂之积,即任意正整数n=a1^p1*a2^p2*...*ai^pi:其中ai为任意素数,pi为任意整数. 题意是输入整数n,求至少2个整数,使得它们的最 ...