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 home
mockito docs

测试框架Mockito使用笔记的更多相关文章

  1. mock测试框架Mockito

    无论是敏捷开发.持续交付,还是测试驱动开发(TDD)都把单元测试作为实现的基石.随着这些先进的编程开发模式日益深入人心,单元测试如今显得越来越重要了.在敏捷开发.持续交付中要求单元测试一定要快(不能访 ...

  2. Mock测试框架(Mockito为例)

    在做单元测试的时候,有的时候用到的一些类,我们构造起来不是那么容易,比如HttpRequest,或者说某个Service依赖到了某个Dao,想构造service还得先构造dao,这些外部对象构造起来比 ...

  3. Java测试框架Mockito源码分析

    1.Mockito简介 测试驱动的开发(Test Driven Design, TDD)要求我们先写单元测试,再写实现代码.在写单元测试的过程中,一个很普遍的问题是,要测试的类会有很多依赖,这些依赖的 ...

  4. Mockito:一个强大的用于Java开发的模拟测试框架

    https://blog.csdn.net/zhoudaxia/article/details/33056093 介绍 本文将介绍模拟测试框架Mockito的一些基础概念, 介绍该框架的优点,讲解应用 ...

  5. 使用强大的 Mockito 测试框架来测试你的代码

    原文链接 : Unit tests with Mockito - Tutorial 译文出自 : 掘金翻译计划 译者 : edvardhua 校对者: hackerkevin, futureshine ...

  6. 用maven搭建 testNG+PowerMock+Mockito测试框架

    单元测试是开发中必不可少的一部分,是产品代码的重要保证. Junit和testNG是当前最流行的测试框架,Junit是使用最广泛的测试框架,有兴趣的话自己baidu一下. testNG基于Junit和 ...

  7. Robolectric测试框架使用笔记

    1. 概述 Robolectric(http://robolectric.org/)是一款支持在桌面JVM模拟Android环境的测试框架,通过shadow包下的类来截取view.activity等类 ...

  8. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:测试SSH框架分层整合及验证事务是否有效

    测试框架分层的整合 HibernateTemplate 和 HibernateDaoSupport,这两个类是 Spring 为整合 Hibernate3 提供的两个工具类. HibernateTem ...

  9. Android开源测试框架学习

    近期因工作需要,分析了一些Android的测试框架,在这也分享下整理完的资料. Android测试大致分三大块: 代码层测试 用户操作模拟,功能测试 安装部署及稳定性测试 代码层测试 对于一般java ...

随机推荐

  1. Android剪切板传递数据传递序列化对象数据

    一.剪切板的使用介绍 1. 剪切板对象的创建 使用剪切板会用到,ClipboardManager对象,这个对像的创建不可以使用构造方法,主要是由于没有提供public的构造函数(单例模式),需要使用A ...

  2. 【Pro ASP.NET MVC 3 Framework】.学习笔记.12.ASP.NET MVC3的细节:URLs,Routing和Areas

    Adam Applied ASP.NET 4 in Context 1 介绍Routing系统 在引入MVC之前,ASP.NET假定被请求的URLs和服务器硬盘上的文件之间有着直接关系.服务器的任务是 ...

  3. HDU 1024:Max Sum Plus Plus(DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=1024 Max Sum Plus Plus Problem Description Now I think you ...

  4. 20145227 《Java程序设计》第2周学习总结

    20145227 <Java程序设计>第2周学习总结 教材学习内容总结 3.1 类型.变量与运算符 1.基本类型:在java中基本类型主要分为整数.字节.浮点数.字符与布尔. 整数:分为s ...

  5. JAVA导出数据到excel中大数据量的解决方法

    最近在做项目功能时 ,发现有20万以上的数据.要求导出时直接导出成压缩包.原来的逻辑是使用poi导出到excel,他是操作对象集合然后将结果写到excel中. 使用poi等导出时,没有考虑数据量的问题 ...

  6. 有三个线程T1 T2 T3,如何保证他们按顺序执行-转载

    T3先执行,在T3的run中,调用t2.join,让t2执行完成后再执行t3 在T2的run中,调用t1.join,让t1执行完成后再让T2执行 public class Test { // 1.现在 ...

  7. [BIM]案例

    以下是中建三局BIM小组的项目,用以参考: BIM协同设计与质量控制 现实建筑物实体都是以三维空间状态存在,若用三维设计表达更具有优势.如复杂管综设计,一般情况下,二维AutoCAD设计是在建筑.结构 ...

  8. Cocos2dx-lua开发之c++绑定到lua

    一. 简单介绍 文章介绍是在实际的游戏开发项目中,将自定义的C++类绑定到lua中,能够让lua调用c++类.会创建一个python脚本,执行python脚本会让自动将我们的c++类绑定到lua.生成 ...

  9. JavaScript DOM 编程艺术(第2版)读书笔记(5)

    最佳实践 平稳退化 网站的访问者完全有可能使用的是不支持Javascript的浏览器,还有一种可能是虽然浏览器支持Javascript,但用户已经禁用它了.如果没有考虑到这种情况,人们在访问你们的网站 ...

  10. 【转】SVN服务器搭建--Subversio与TortoiseSVN的配置安装

    转载地址:http://blog.csdn.net/xinxin19881112/article/details/6410263 1.  Subversio和TortoiseSVN 简介 Subver ...