Java类与对象单元测试核心是隔离验证构造逻辑、方法功能、状态变化和边界情况,使用JUnit 5+Mockito,遵循命名规范、断言驱动、单关注点原则,并覆盖异常与边界路径。

Java 类与对象的单元测试,核心是验证单个类在隔离环境下的行为是否符合预期——重点测构造逻辑、方法功能、状态变化和边界情况,不依赖外部系统(如数据库、网络)。
用 JUnit + Mockito 搭建基础测试结构
确保项目引入了 JUnit 5(推荐)和 Mockito 依赖。每个被测类对应一个 XXXTest 测试类,命名一致、同包或置于 test 目录下。测试方法用 @Test 标注,建议用 assertJ 或 JUnit 自带断言(如 assertEquals、assertTrue)校验结果。
- 测试类通常不写
public,方法也不需要public(JUnit 5 允许 package-private) - 用
@BeforeEach初始化被测对象,避免重复创建;必要时用@AfterEach清理资源 - 避免在测试中使用
System.out.println,用断言代替“肉眼观察”
针对构造器和字段:测对象能否正确创建与初始化
检查构造参数是否有效赋值、默认值是否合理、非法参数是否抛出预期异常。
- 正常构造:创建对象后,用
assertNotNull和assertEquals验证关键字段值 - 非法参数:用
assertThrows(IllegalArgumentException.class, () -> new User(null))验证空用户名抛异常 - 有默认值的字段(如布尔型默认
false),显式断言其初始状态
针对方法行为:按输入-输出-副作用分类验证
区分查询方法(无状态变更)、变更方法(修改对象内部状态)、工具方法(纯函数式)分别设计用例。
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
立即学习“Java免费学习笔记(深入)”;
- 查询方法(如
getUserFullName()):准备不同输入(空名、null 值、特殊字符),断言返回字符串是否符合拼接规则 - 变更方法(如
deposit(double amount)):调用前记录原余额,调用后断言余额增加且等于原值 + amount - 涉及依赖的对象(如 Service 调用 Repository),用 Mockito
mock替换真实依赖,用when(...).thenReturn(...)控制返回,再验证是否调用了正确方法(verify(repo).save(...))
覆盖典型边界与异常路径
不只测“能跑通”,更要确认“错的时候表现对”。常见需覆盖的情况:
- 数值类:0、负数、极大值、小数精度(如金额用
BigDecimal时注意 equals vs compareTo) - 字符串类:null、空串、仅空白符、超长字符串、含 Unicode 或控制字符
- 集合类:null 集合、空集合、单元素、重复元素、并发修改场景(若涉及线程安全)
- 状态流转:如订单从 “created” → “shipped” → “delivered”,验证非法跳转(如直接 created → delivered)是否被拒绝
不复杂但容易忽略的是:每次测试只验证一个关注点,方法名可体现意图(如 shouldThrowExceptionWhenAmountIsNegative()),让失败时快速定位问题根源。

















