1. 概述

Mockito 是 Java 生态中最主流的单元测试 Mock 框架。但在引入依赖时,不少开发者可能会遇到一个经典问题:该用 mockito-core 还是 mockito-all

本文就来简单粗暴讲清楚这两个 artifact 的区别,帮你避免踩坑,选对依赖。

2. mockito-core ✅ 推荐使用

mockito-coreMockito 官方主推的核心库,包含了完整的 API 和实现代码。它是目前唯一 actively maintained 的发布包。

使用 Maven 时,只需添加如下依赖:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>3.3.3</version>
    <scope>test</scope>
</dependency>

✅ 推荐理由:

  • 官方持续维护,版本更新及时
  • 遵循标准依赖管理机制,由 Maven/Gradle 自动解析依赖(如 hamcrest、objenesis)
  • 更适合现代构建工具,模块清晰,便于排除或替换依赖

引入后即可正常使用 Mockito 提供的所有功能,比如 mock()when()verify() 等注解和 API。

3. mockito-all ❌ 已淘汰

mockito-all 是一个早已过时的聚合包,它把 Mockito 本身及其所有依赖(如 hamcrest、objenesis)打包成一个“全量 jar”。

你可以把它理解为“一键集成”时代的产物——适用于没有依赖管理工具(比如纯手工导 jar 包)的项目。

查看 mockito-all.jar 内部结构,可以看到它包含了多个第三方库的类:

mockito-all.jar
|-- org
|   |-- hamcrest
|   |-- mockito
|   |-- objenesis

⚠️ 关键事实:

  • 最后一个正式版本是 1.10.19,发布于 2014 年
  • 从 Mockito 2.x 开始,官方不再发布 mockito-all
  • 使用它可能导致类冲突(例如项目中已引入其他版本的 hamcrest)

📌 历史背景:
当年部分开发者不熟悉 Maven 或 Gradle,为了“少配点东西”,官方提供了 mockito-all。但现在构建工具已是标配,这种“大杂烩”方式早已不合时宜。

4. 结论与建议

对比项 mockito-core mockito-all
是否推荐 ✅ 强烈推荐 ❌ 已废弃,禁止新项目使用
是否持续更新 ✅ 是 ❌ 否(最后更新 2014 年)
依赖管理方式 标准依赖,由构建工具管理 打包所有依赖,易引发冲突
适用场景 所有现代 Java 项目 仅限无构建工具的老旧项目(不推荐)

总结一句话
现在所有项目都应该使用 mockito-core不要再用 mockito-all,它已经退出历史舞台。

如果你在老项目里看到 mockito-all,建议尽早升级并替换为 mockito-core,避免潜在的依赖冲突和安全风险。

📧 如有疑问,欢迎联系:dev@mockito.org


原始标题:The Difference Between mockito-core and mockito-all