assertEquals是JUnit的核心断言方法,用于验证实际值是否等于预期值;JUnit 4导入org.junit.Assert.assertEquals,JUnit 5导入org.junit.jupiter.api.Assertions.assertEquals并推荐静态导入;比较浮点数需指定delta,对象比较依赖正确重写的equals()方法;可添加自定义失败消息提升可读性。

在 Java 单元测试中,assertEquals 是 JUnit 提供的核心断言方法,用于验证实际结果是否等于预期结果。它本身**不叫“断言 assertEquals”**,而是“使用 assertEquals 进行断言”,属于 JUnit 断言(Assertion)的一种。
确保使用正确的 JUnit 版本和导入
JUnit 4 和 JUnit 5 的用法和导入路径不同,容易出错:
-
JUnit 4:导入
org.junit.Assert.assertEquals,常配合@Test使用; -
JUnit 5:导入
org.junit.jupiter.api.Assertions.assertEquals,推荐静态导入以简化写法(如import static org.junit.jupiter.api.Assertions.*;)。
若导入错误或未静态导入,编译会报错“cannot resolve method”。建议检查 IDE 的自动导入提示,或手动确认包路径。
基本用法:验证数值计算结果
对整数、浮点数、字符串等常见类型,直接传入预期值、实际值即可:
// JUnit 5 示例(已静态导入)
@Test
void testAddition() {
int result = Calculator.add(2, 3); // 假设返回 5
assertEquals(5, result); // ✅ 通过
assertEquals(6, result); // ❌ 失败,抛出 AssertionFailedError
}
注意:对于 double/float,必须指定 delta(误差范围),否则因浮点精度问题几乎总会失败:
你是 TypeScript 项目架构专家,专注于脚手架搭建生产就绪的 Node.js 和前端应用。生成包含现代工具链(pnpm、Vite、Next.js)、类型
double actual = Math.sqrt(2) * Math.sqrt(2); assertEquals(2.0, actual, 1e-10); // ✅ 正确:允许 10⁻¹⁰ 误差 // assertEquals(2.0, actual); // ❌ 危险!可能失败
验证对象或自定义类型结果
若计算返回的是对象(如 List、Person),assertEquals 依赖其 equals() 方法:
- 集合类(
List、Set)通常已正确实现equals,可直接比较; - 自定义类(如
Vector2D)必须重写equals()(以及hashCode()),否则默认比较引用,导致断言失败。
示例:
@Test
void testVectorSum() {
Vector2D v1 = new Vector2D(1.0, 2.0);
Vector2D v2 = new Vector2D(3.0, 4.0);
Vector2D sum = v1.add(v2); // 返回 (4.0, 6.0)
assertEquals(new Vector2D(4.0, 6.0), sum); // ✅ 仅当 Vector2D 正确重写了 equals()
}
增强可读性:添加自定义失败消息
当断言失败时,默认错误信息只显示“expected: X but was: Y”。加上描述性消息能快速定位问题:
assertEquals("加法结果应为 10", 10, Calculator.add(7, 3));
// 失败时输出:加法结果应为 10 expected: but was:
消息放在**第一个参数**(JUnit 4/5 一致),有助于团队协作和 CI 日志排查。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










