1. 概述
Mockito 是 Java 生态中最主流的单元测试 Mock 框架。但在引入依赖时,不少开发者可能会遇到一个经典问题:该用 mockito-core
还是 mockito-all
?
本文就来简单粗暴讲清楚这两个 artifact 的区别,帮你避免踩坑,选对依赖。
2. mockito-core ✅ 推荐使用
mockito-core
是 Mockito 官方主推的核心库,包含了完整的 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