什么是 Mockito?
Mockito 是一个用于 Java 的开源测试框架,主要用于创建和配置 mock 对象。 它允许开发者在不依赖真实对象的情况下编写单元测试,从而提高测试的隔离性和可靠性。
Mockito 的核心原理
Mockito 的底层实现主要依赖于以下技术:
- 动态代理(Dynamic Proxy):对于接口类型,Mockito 使用 Java 原生的
java.lang.reflect.Proxy创建代理实例。 - 字节码生成(Bytecode Generation):对于具体类,Mockito 利用字节码操作库(如 ByteBuddy)在运行时生成子类,并重写方法以实现拦截。
- 方法拦截与行为记录:当调用 mock 对象的方法时,Mockito 会拦截该调用,根据预设的行为(如
when(...).thenReturn(...))返回结果,并记录调用信息用于验证。 - 调用验证机制:通过
verify()方法,Mockito 可检查某个方法是否被调用、调用次数及参数是否匹配。
简单示例
// 创建 mock 对象
List mockedList = Mockito.mock(List.class);
// 设置行为
Mockito.when(mockedList.get(0)).thenReturn("first");
// 调用
String result = mockedList.get(0); // 返回 "first"
// 验证调用
Mockito.verify(mockedList).get(0);
为什么使用 Mockito?
- 解耦测试依赖,提升测试速度
- 精确控制被测对象的外部交互
- 支持对异常、空值、多次调用等复杂场景的模拟
- 语法简洁,易于集成到 JUnit 等测试框架中