mockito,一个让人着迷的单元测试隔离框架。对比了easymock,jmock,jmockito,最终选择了它。

为什么用他

  1. 接口语法简洁、自然。写起来像在说话,很舒服。
  2. 文档更完整。让学习曲线更简单。
  3. 可以进行参数化。在很多情况下,不想关心具体的参数是什么。
  4. mock的思路更舒服。废弃了陈旧的“录制——重放”的方法,使用的“期望——执行——断言”更自然的方法。

他能解决什么问题

  1. 可以mock接口。
  2. 可以破除不可控制的依赖。主要体现在:数据库、文件系统、http(特别是在和第三方接口对接时)等。
  3. 模拟异常。

使用场景

mock接口

Comparable c = mock(Comparable.class);
when(c.compareTo("Test")).thenReturn(1); assertEquals(1, c.compareTo("Test"));

不关注参数

Comparable c = mock(Comparable.class);
//一旦使用anyXxx()系列,所有的方法参数都必须`全部`使用anyXxx()。
when(c.compareTo(anyString())).thenReturn(1); assertEquals(1, c.compareTo("Test"));

破除不可控制的依赖

HttpServletRequest successRequest =mock(HttpServletRequest.class);
when(successRequest.getAttribute("status")).thenReturn("200"); OrderEntity order = finish(successRequest); assertTrue(order.isOk());

模拟异常

OutputStream osMock = mock(OutputStream.class);
OutputStreamWriter osw = new OutputStreamWriter(osMock);
/*
* 因为close()方法的返回值是void,所以只能用这只格式
* 如果返回值不是void,也可以使用when(someMethod()).thenThrow(new Exception());
*/
doThrow(IOException.class).when(osMock).close(); osw.close();

更简洁的mock

通过注解Mock

@Mock
private Iterator i; @BeforeClass
public void init() {
//这个是必须的。
MockitoAnnotations.initMocks(this);
} @Test
public void annotationMock() {
when(i.next()).thenReturn(1); assertEquals(1, i.next());
}

限制

对于final类、匿名类和Java的基本类型是无法进行mock。不过可以使用powerMock扩展。但是正常情况下是不需要的,除非对历史代码的单元测试

参考资源

  1. 官方文档
  2. 中文文档
  3. 快速上手

单元测试——隔离神器:mockito的更多相关文章

  1. 单元测试神器Mockito

    Mockit是一种mock工具/框架.mock可以模拟各种各样的对象,从而代替真正的对象做出希望的响应 1.工程中引入Mockito #以gradle的方式为例 testCompile("o ...

  2. Java单元测试神器之Mockito

    什么是 Mock 测试 Mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法.什么是不容易构造的对象呢?例如HttpServletReques ...

  3. 单元测试mock之mockito使用

    先来一个简单的例子来感受一下 外部接口类:TestService.java package com.yzl.mock; /** * 测试用服务 * * @author yangzhilong */ p ...

  4. 单元测试——测试神器,testng

    为什么用它 建议使用 TestNG 作为 Java 项目的主要单元测试框架,因为 TestNG 在参数化测试.依赖测试以及套件测试(组)方面功能更加强大.TestNG 意味着高级的测试和复杂的集成测试 ...

  5. .net测试篇之单元测试/集成测试神器Autofixture

    autofixture简介 有了单元测试框架加上Moq(后面我们会用单独章节来介绍moq),可以说测试问题基上都能搞定了.然而有了AutoFixture对单元测试来说可以说是如虎添翼,AutoFixt ...

  6. 单元测试及框架简介 --junit、jmock、mockito、powermock的简单使用

    转 单元测试及框架简介 --junit.jmock.mockito.powermock的简单使用 2013年08月28日 14:33:06 luvinahlc 阅读数:6413 标签: 测试工具单元测 ...

  7. Android 单元测试(junit、mockito、robolectric)

    1.运用JUnit4 进行单元测试 首先在工程的 src 文件夹内创建 test 和 test/java 文件夹. 打开工程的 build.gradle(Module:app)文件,添加JUnit4依 ...

  8. JUnit + Mockito 单元测试(二)

    摘自: http://blog.csdn.net/zhangxin09/article/details/42422643 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 入门 ...

  9. JUnit + Mockito 单元测试(二)(good)

    import org.junit.Test; import org.mockito.Matchers; import org.mockito.Mockito; import java.util.Lis ...

随机推荐

  1. Python学习---Django的request.post源码分析

    request.post源码分析: 可以看到传递json后会帮我们dumps处理一次最后一字节形式传递过去

  2. CSS学习摘要-浮动与清除浮动

    以下从浮动到BFC的段落 摘自MDN 网络开发者 float 浮动 float CSS属性指定一个元素应沿其容器的左侧或右侧放置,允许文本和内联元素环绕它.该元素从网页的正常流动中移除,尽管仍然保持部 ...

  3. 移动端上下滑动事件之--坑爹的touch.js

    下面的方法,不知道是操作方法不对还是啥.  在 zepto.js 里面加那一段代码不起作用 百度的 touch.js 是可以用的,但是使用方式 和 zepto有点不一样. 解决方案:参照这个链接地址 ...

  4. 安装配置maven私服-nexus

    1.ubuntu下的Bundle安装方式 1.1. 去官网下载安装包:http://www.sonatype.org/nexus/ 我这里下载的是:nexus-2.8.1-01-bundle.zip, ...

  5. python第十二课——for in循环

    1.for...in循环: 有两个使用场景: 场景一:for in和range对象配合使用 range对象的引入讲解 格式:range([start,end,step]): 特点:索引满足含头不含尾的 ...

  6. 超链接<a>标签用法

    1.a标签点击事件 1>1a href="javascript:js_method();" 这是我们平台上常用的方法,但是这种方法在传递this等参数的时候很容易出问题,而且 ...

  7. BZOJ3530:[SDOI2014]数数(AC自动机,数位DP)

    Description 我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为其子串.例如当S=(22,333,0233)时,233是幸运数,2333.20233.3 ...

  8. 【转】 iOS播放视频时候,忽略设备静音按钮

    用户有时会在静音模式下观看视频,如果不主动设置的话,视频是没有声音的,通过AVAudioSession可开启以视频为主导的播放模式, 首先需要导入,AVFoundtion.framework,在控制播 ...

  9. 初识Qt图片显示、平移及旋转

    1.新建一个Qt Gui应用,项目名称为myPicture,基类选择为QMainWindow,类名设置为MainWindow. 2.在mainwindow.h头文件中添加void paintEvent ...

  10. Kafka设计解析(十二)Kafka 如何读取offset topic内容 (__consumer_offsets)

    转载自 huxihx,原文链接 Kafka 如何读取offset topic内容 (__consumer_offsets) 众所周知,由于Zookeeper并不适合大批量的频繁写入操作,新版Kafka ...