时间:2018/6/15 15:01:15
参考:
Mock 简介#
为什么需要Mock#
测试驱动的开发(Test Driven Design, TDD)要求我们先写单元测试,再写实现代码。在写单元测试的过程中,我们往往会遇到要测试的类有很多依赖,这些依赖的类/对象/资源又有别的依赖,从而形成一个大的依赖树,要在单元测试的环境中完整地构建这样的依赖,是一件很困难的事情。
Mockito 介绍及使用#
简介#
Mockito是一个模拟测试框架,可以让你用优雅,简洁的接口写出漂亮的单元测试。Mockito可以让单元测试易于可读,产生简洁的校验错误。
使用场景#
- 提前创建测试,TDD(测试驱动开发)
- 团队可以并行工作
- 你可以创建一个验证或者演示程序
- 为无法访问的资源编写测试
- Mock可以交给用户
- 隔离系统
准备工作#
-
引入依赖 最新版点击此处
1 2 3 4 5 6 7
<!-- https://mvnrepository.com/artifact/org.mockito/mockito-core --> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>2.18.3</version> <scope>test</scope> </dependency>
-
导入 Mock 类
1
import static org.mockito.Mockito.*;
开始使用#
-
初始化选项
-
调用对象引用的对象不会出现空指针异常
1
mock(Human.class, Answers.RETURNS_DEEP_STUBS)
-
智能赋值,常量常量的默认值,其它空
1
mock(Human.class, Answers.RETURNS_SMART_NULLS);
- 返回指定值。
#
when(mock.getAll()).thenReturn(personList);
匹配任意参数,get任意一个元素都会返回1#
when(list.get(anyInt())).thenReturn(1);
自定义参数类型#
when(numbers.get(intThat(new OddNumberMatcher()))).thenReturn("奇数");
实现类#
public class OddNumberMatcher implements ArgumentMatcher
, Serializable { @Override public boolean matches(Integer argument) { return argument % 2 == 1; } }
-
-
验证方法调用。
1 2
# 至少调用10次 verify(mock, atLeast(10)).getAll();
-
抛出异常
1 2 3 4
# 有返回值的方法 when(mock.getAll()).thenThrow(new RuntimeException()); # 无返回值方法 doThrow(new IOException()).when(outputStream).close();
-
使用注解,可以指定初始化选项,需要初始化。
1 2 3 4 5 6
@Mock private List list; public void ConstructMethod() { MockitoAnnotations.initMocks(this); }