单元测试的技术组成(junit/assert/testng/Mockito)

一、单元测试的技术组成(核心视角)

一个完整的单元测试 = 测试运行器 + Mock 机制 + 断言机制

角色 作用 典型代表
**测试框架(Runner)**​ 发现、执行测试用例 JUnit 4 / JUnit 5 / TestNG
**断言框架(Assertions)**​ 判断"对不对" JUnit Assert / AssertJ / Hamcrest / Truth / TestNG
Mock 框架 构造依赖、隔离被测对象 Mockito / EasyMock / PowerMock

JUnit 本质是 测试运行平台,只是顺带提供了断言能力。

二、为什么需要这种细分?

断言框架只关心一件事:结果是否正确

复制代码
assertEquals(3, result);
assertThat(result).isEqualTo(3);

职责:

  • 比较实际值和期望值

  • 提供清晰的错误信息

  • 不参与对象创建、依赖管理

这是"验证层"

Mock 框架只关心一件事:环境是否可控

复制代码
UserService userService = mock(UserService.class);
when(userService.find(1)).thenReturn(new User("Tom"));

职责:

  • 替换真实依赖

  • 控制返回值

  • 验证调用行为

这是"准备层"

三、现实中的组合方式(非常重要)

最主流组合(Spring Boot 标配)

复制代码
JUnit 5  (跑测试)
+ Mockito(造依赖)
+ AssertJ(写断言)

老一代经典组合

复制代码
JUnit 4
+ Mockito
+ Hamcrest

Google / Android

复制代码
JUnit 4/5
+ Mockito
+ Truth