Mockito:Java 测试中最常用的 Mock 框架

Mockito 在 GitHub 上拿到了 15,431 个 Star。

Java 生态里做单元测试,绕不开 Mock 这件事。Mockito 就是干这个的,干了十几年,基本上是 Java Mock 框架的事实标准。

1、 它是干嘛的

一句话:在测试中模拟那些你不想真正调用的依赖。

数据库连接、远程接口、第三方服务,写单测的时候你不可能真的去调它们。Mockito 让你用几行代码创建一个假对象,控制它的返回值,验证它是否被正确调用。

2、 为什么选它

Java Mock 框架不止它一个,但 Mockito 占据了绝大部分市场。原因很直接:

  • API 简洁,上手快。创建 Mock、设置行为、验证调用,三步搞定
  • 社区活跃,文档齐全,Stack Overflow 上问题基本都能搜到答案
  • 与 JUnit、Spring Test、Gradle、Maven 无缝集成
  • 5.x 版本默认使用 inline mockmaker,支持 mock final 类和方法

正文顶部截图

3、 基本用法

创建一个 Mock 对象:

List mockList = mock(List.class);
when(mockList.get(0)).thenReturn("hello");
mockList.get(0); // 返回 "hello"
mockList.get(1); // 返回 null

验证方法是否被调用:

mockList.add("test");
verify(mockList).add("test");

Mock 一个外部服务:

UserService mockService = mock(UserService.class);
when(mockService.findById(1L)).thenReturn(new User("张三"));

// 在测试中注入 mockService,所有对 findById 的调用都会返回预设值

4、 版本演进

Mockito 目前到了 5.x。几个关键节点:

  • 2.x:引入 MockitoJUnitRunner,改进 API 设计
  • 3.x:要求 Java 8 以上
  • 4.x:清理了大量废弃 API
  • 5.x:默认使用 inline mockmaker,要求 Java 11 以上

同一时间只支持一个大版本,不向后回移修复。

README区域截图

5、 适合谁用

  • 写 Java 单元测试、需要隔离外部依赖的开发者
  • 搭建测试框架、需要统一 Mock 方案的团队
  • 用 Spring Boot 做后端、想让测试更可控的工程师

离外部依赖的开发者

  • 搭建测试框架、需要统一 Mock 方案的团队
  • 用 Spring Boot 做后端、想让测试更可控的工程师

更多推荐