单元测试——隔离神器:mockito
mockito,一个让人着迷的单元测试隔离框架。对比了easymock,jmock,jmockito,最终选择了它。
为什么用他
- 接口语法简洁、自然。写起来像在说话,很舒服。
- 文档更完整。让学习曲线更简单。
- 可以进行参数化。在很多情况下,不想关心具体的参数是什么。
- mock的思路更舒服。废弃了陈旧的“录制——重放”的方法,使用的“期望——执行——断言”更自然的方法。
他能解决什么问题
- 可以mock接口。
- 可以破除不可控制的依赖。主要体现在:数据库、文件系统、http(
特别是在和第三方接口对接时)等。 - 模拟异常。
使用场景
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扩展。但是正常情况下是不需要的,除非对历史代码的单元测试
参考资源
单元测试——隔离神器:mockito的更多相关文章
- 单元测试神器Mockito
Mockit是一种mock工具/框架.mock可以模拟各种各样的对象,从而代替真正的对象做出希望的响应 1.工程中引入Mockito #以gradle的方式为例 testCompile("o ...
- Java单元测试神器之Mockito
什么是 Mock 测试 Mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法.什么是不容易构造的对象呢?例如HttpServletReques ...
- 单元测试mock之mockito使用
先来一个简单的例子来感受一下 外部接口类:TestService.java package com.yzl.mock; /** * 测试用服务 * * @author yangzhilong */ p ...
- 单元测试——测试神器,testng
为什么用它 建议使用 TestNG 作为 Java 项目的主要单元测试框架,因为 TestNG 在参数化测试.依赖测试以及套件测试(组)方面功能更加强大.TestNG 意味着高级的测试和复杂的集成测试 ...
- .net测试篇之单元测试/集成测试神器Autofixture
autofixture简介 有了单元测试框架加上Moq(后面我们会用单独章节来介绍moq),可以说测试问题基上都能搞定了.然而有了AutoFixture对单元测试来说可以说是如虎添翼,AutoFixt ...
- 单元测试及框架简介 --junit、jmock、mockito、powermock的简单使用
转 单元测试及框架简介 --junit.jmock.mockito.powermock的简单使用 2013年08月28日 14:33:06 luvinahlc 阅读数:6413 标签: 测试工具单元测 ...
- Android 单元测试(junit、mockito、robolectric)
1.运用JUnit4 进行单元测试 首先在工程的 src 文件夹内创建 test 和 test/java 文件夹. 打开工程的 build.gradle(Module:app)文件,添加JUnit4依 ...
- JUnit + Mockito 单元测试(二)
摘自: http://blog.csdn.net/zhangxin09/article/details/42422643 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 入门 ...
- JUnit + Mockito 单元测试(二)(good)
import org.junit.Test; import org.mockito.Matchers; import org.mockito.Mockito; import java.util.Lis ...
随机推荐
- Redis学习---Redis操作之Python连接
PyCharm下的Redis连接 连接方式: 1. 操作模式 redis-py提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使 ...
- Linux 系统的磁盘设备_【all】
磁盘 ->RAID ->分区 ->格式化 ->挂载 基本的框架 a.硬盘的外部以及内部硬件结构,工作原理和读写原理b.RAID的划分(一块盘划分为一块或者多块的小虚拟磁盘,可以 ...
- redis几种数据类型以及使用场景
1. string类型 string为最简单类型,一个key对应一个value set mykey "wangzai" ##设置key,第二次赋值会直接覆盖之前的 setnx my ...
- TreeMap:是基于红黑树的Map接口的实现
> TreeMap:是基于红黑树的Map接口的实现. 红黑树:平衡二叉树 取出时,可以有三种方式:前序遍历,中序遍历,后序遍历 >排序: A 自然排序 --TreeMap无参构造 Tre ...
- November 21st 2016 Week 48th Monday
A bird is known by its note, and a man by his talk. 闻其声而知鸟,听其言而知人. Listen to what a man talks, watch ...
- PHP设计模式系列 - 单例
单例模式 通过提供自身共享实例的访问,单例设计模式用于限制特定对象只能被创建一次. 使用场景 例如数据库实例,一般都会走单例模式. 单例模式可以减少类的实例化 代码:来源InitPHP框架,先检测类有 ...
- MySQL复制(一)复制原理探讨
1 复制概述 1.1.复制解决的问题 数据复制技术有以下一些特点: (1) 数据分布 (2) 负载平衡(load balancing) (3) 备份 (4) 高可用性(high availabilit ...
- Geeks : Kruskal’s Minimum Spanning Tree Algorithm 最小生成树
版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/.未经本作者同意不得转载. https://blog.csdn.net/kenden23/article ...
- programming-languages学习笔记--第9部分
programming-languages学习笔记–第9部分 */--> pre.src {background-color: #292b2e; color: #b2b2b2;} pre.src ...
- REST接口设计规范总结
简介 Representational State Transfer 简称 REST 描述了一个架构样式的网络系统.REST 指的是一组架构约束条件和原则.满足这些约束条件和原则的应用程序或设计就是 ...