测试框架Mockito使用笔记
Mockito,测试框架,语法简单,功能强大!
静态、私有、构造等方法测试需要配合PowerMock,PowerMock有Mockito和EasyMock两个版本,语法相同,本文只介绍Mockito.
测试对像:ArticleManager
ArticleManager 类
public class ArticleManager {
void setDatabase(ArticleDatabase database) {... }
String get(String val){
database.get(val);
}
String add(String val){
database.set(val);
}
}
ArticleDatabase 类
public class ArticleDatabase {
String get(String val){...}
String add(String val){...}
}
注解
@Mock
创建Mock对像
@Mock
private ArticleDatabase ds;
实例ds是一个虚拟对像,ds对像本身的所有方法返回值都为Null。
@InjectMocks
@InjectMocks
private ArticleManager articleManager;
将现有Mock对像(ds)注入到articleManager,支持方法包括constructor, setter, property 和 Spring的@Autowired !
@Captor
参数调用截取器
//定义@Captor,如果要获取多个参数, 需要定义多个@Captor
@Captor
private ArgumentCaptor<String> argumentString;
articleManager.add("content");
verify(ds, times(1)).add(argumentString.capture());
//打印参数值
logger.debug(argumentString.getValue());
@Spy
Mock类的部分真实或定制后调用。没有定制的方法就调用真实的方法。
@Spy
private ArticleManager articleManager2;
//定制方法,这个地方用`when`还会调用真实的方法后返回定制结果
//见:http://docs.mockito.googlecode.com/hg/latest/org/mockito/Spy.html
doReturn("0").when(articleManager2).get(0);
articleManager2.get(0);
verify(articleManager2).get(0);
//调用真实的方法
articleManager2.get(1)
verify(articleManager2).get(1);
@Spy
真实调用也可以用@Mock
对像thenCallRealMethod
方法调用:
when(articleManager2.get(2)).thenCallRealMethod();
Stubbing
特别制定Mock对像某方法的返回值、类型或异常等,默认是Null,
when(ds.get(0)).thenReturn("first");
when(ds.get(1)).thenThrow(new RuntimeException());
verify
对某方法返回结果的校验,包括调用次数,返回值等
articleManager.add("one");
verify(ds).add("one");
参考:@Captor
模糊匹配
在Stubbing或verify里可用模糊匹配来适配多种情况的调用,Mockito在包org.mockito.Matchers下提供有anyString(), anyInt()或者直接anyObject()等大量模糊匹配函数,如果有需要还可自己写,实现(org.hamcrest.Matcher)。 例:
when(articleManager.get(anyString())).toReturn("element");
System.out.println(articleManager.get("1"));
verify(articleManager).get(anyString());
在使用校验函数verify时,参数如果有模糊匹配则所有参数都要用模糊匹配,如:
//正确的写法:
verify(mock).articleManager(anyInt(), anyString(), eq("third argument"));
//错误用法:
verify(mock).articleManager(anyInt(), anyString(), "third argument");
更多模糊匹配函数请参考:http://mockito.googlecode.com/svn/branches/1.8.5/javadoc/org/mockito/Matchers.html
参考地址:
测试框架Mockito使用笔记的更多相关文章
- mock测试框架Mockito
无论是敏捷开发.持续交付,还是测试驱动开发(TDD)都把单元测试作为实现的基石.随着这些先进的编程开发模式日益深入人心,单元测试如今显得越来越重要了.在敏捷开发.持续交付中要求单元测试一定要快(不能访 ...
- Mock测试框架(Mockito为例)
在做单元测试的时候,有的时候用到的一些类,我们构造起来不是那么容易,比如HttpRequest,或者说某个Service依赖到了某个Dao,想构造service还得先构造dao,这些外部对象构造起来比 ...
- Java测试框架Mockito源码分析
1.Mockito简介 测试驱动的开发(Test Driven Design, TDD)要求我们先写单元测试,再写实现代码.在写单元测试的过程中,一个很普遍的问题是,要测试的类会有很多依赖,这些依赖的 ...
- Mockito:一个强大的用于Java开发的模拟测试框架
https://blog.csdn.net/zhoudaxia/article/details/33056093 介绍 本文将介绍模拟测试框架Mockito的一些基础概念, 介绍该框架的优点,讲解应用 ...
- 使用强大的 Mockito 测试框架来测试你的代码
原文链接 : Unit tests with Mockito - Tutorial 译文出自 : 掘金翻译计划 译者 : edvardhua 校对者: hackerkevin, futureshine ...
- 用maven搭建 testNG+PowerMock+Mockito测试框架
单元测试是开发中必不可少的一部分,是产品代码的重要保证. Junit和testNG是当前最流行的测试框架,Junit是使用最广泛的测试框架,有兴趣的话自己baidu一下. testNG基于Junit和 ...
- Robolectric测试框架使用笔记
1. 概述 Robolectric(http://robolectric.org/)是一款支持在桌面JVM模拟Android环境的测试框架,通过shadow包下的类来截取view.activity等类 ...
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:测试SSH框架分层整合及验证事务是否有效
测试框架分层的整合 HibernateTemplate 和 HibernateDaoSupport,这两个类是 Spring 为整合 Hibernate3 提供的两个工具类. HibernateTem ...
- Android开源测试框架学习
近期因工作需要,分析了一些Android的测试框架,在这也分享下整理完的资料. Android测试大致分三大块: 代码层测试 用户操作模拟,功能测试 安装部署及稳定性测试 代码层测试 对于一般java ...
随机推荐
- COM编程概述
所谓COM,英文为Componet Object Model,中文为组件对象模型(其实这种解释只有在考试卷上才具有一点实际意义). [1]为什么需要COM? COM是为了解决OLE问题而产生的.COM ...
- scala特质
package com.ming.test /** * scala 特质,类似与java接口,但是比java接口强大,可以有实现方法,定义字段之类的 */ /** * 定义一个日志的特质 */ tra ...
- React笔记_(6)_react语法5
react的版本 目前主要的react有 ES5,ES6.也有ES5和ES6混合编写的.比较混乱. react官方提倡用ES6. 说到这里,就需要提到一个概念--mixin mixin在es6中被摒弃 ...
- Android 常用工具类之LogUtil,可以定位到代码行,双击跳转
package cn.utils; import android.util.Log; public class LogUtils { public static boolean isDebug = t ...
- Linux中变量#,#,@,0,0,1,2,2,*,$$,$?的含义【转】
转自:http://www.cnblogs.com/kaituorensheng/p/4002697.html 1 2 3 4 5 6 7 8 $# 是传给脚本的参数个数 $0 是脚本本身的名字 $1 ...
- 严重: IOException while loading persisted sessions: java.io.EOFException
tomcat在启动时出现如下异常问题: 严重: IOException while loading persisted sessions: java.io.EOFException 严重: Excep ...
- sqlite3把字段为int32(用c++的time(nullptr)获取的)的秒数显示为年月日时分秒
select id, type, msg, datetime(updateTime, 'unixepoch', 'localtime') from ServerLog
- JavaScript脚本语言基础(三)
导读: 数学对象(Math) 数组对象(Array) 字符串对象(String) 日期对象(Date) js对象是属性和方法的集合.JavaScript中的所有事物都是对象,如:字符串.数值.数组.函 ...
- app缓存设计-文件缓存
采用缓存,可以进一步大大缓解数据交互的压力,又能提供一定的离线浏览.下边我简略列举一下缓存管理的适用环境: 1. 提供网络服务的应用 2. 数据更新不需要实时更新,哪怕是3-5分钟的延迟也是可以采用缓 ...
- HDU 4709:Herding
Herding Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...