Mockito 测试工具
介绍
Mock测试是一种软件测试技术,用于模拟对象的行为。在单元测试中,当某些对象难以直接使用或构建时,可以使用Mock对象来替代它们。Mock对象可以模拟真实对象的行为,并验证它们是否按预期被调用。主要用途:
- 隔离测试:确保测试只关注被测单元的逻辑,而不受其他单元的影响。
- 模拟复杂对象:对于难以构建或依赖外部资源的对象,使用Mock对象可以简化测试。
- 验证交互:验证被测单元是否正确调用了依赖对象的方法。
常用工具的Mock工具框架有:Mockito
、EasyMock
、Jest
等,其中Mockito使用最为流行和广泛,它简化了单元测试的编写,特别是在需要模拟依赖对象的情况下。其主要功能包括:
- 创建Mock对象:使用mock()方法创建Mock对象
- 定义行为:使用when()和thenReturn()方法定义Mock对象的行为
- 验证交互:使用verify()方法验证Mock对象的方法是否按预期被调用
- 参数匹配:使用any()、eq()等方法进行参数匹配
基本使用
// mock对象
List mockedList = mock(List.class);
// mock对象调用方法后,可以通过 verify 验证是否执行过(对象+方法+参数维度)
mockedList.add("one");
mockedList.clear();
verify(mockedList).add("one");
// 验证是否执行过参数为任何整型的get方法, anyInt()为参数匹配器
verify(mockedList).get(anyInt());
verify(mockedList).clear();
// Stubbing 存根
// 调用mock对象的方法后,默认返回 null/0/false
System.out.println(mockedList.get(0));
// 可以利用Stubbing,指定调用的返回值
// 例如:指定调用get(0)时,返回first
when(mockedList.get(0)).thenReturn("first");
// 例如:指定调用get(1)时,第一次执行返回second,第二次执行直接抛出异常
when(mockedList.get(1)).thenReturn("second").thenThrow(new RuntimeException());
// 输出 first
System.out.println(mockedList.get(0));
更多参数匹配器见ArgumentMatchers
, 更多存根见OngoingStubbing
。