@Test注解标识测试方法,assertXxx断言验证行为预期;JUnit 4用org.junit.Assert,JUnit 5用org.junit.jupiter.api.Assertions,需注意版本差异与静态导入,配合Maven依赖及规范写法确保测试可靠性。

在 Java 的 JUnit 中,@Test 注解用于标识一个方法为测试方法,而 assertXxx(如 assertEquals、assertTrue 等)是 JUnit 提供的断言工具,用来验证被测代码的行为是否符合预期。二者配合使用,构成单元测试的核心验证逻辑。
确保引入正确的 JUnit 依赖
JUnit 4 和 JUnit 5 的断言 API 有差异,需注意版本一致性:
-
JUnit 4:使用
org.junit.Assert中的静态方法,需静态导入(如import static org.junit.Assert.*;) -
JUnit 5:断言类为
org.junit.jupiter.api.Assertions,同样推荐静态导入(import static org.junit.jupiter.api.Assertions.*;),且部分方法签名和新增能力(如支持 Lambda 懒加载消息)有所增强
若用 Maven,JUnit 5 示例依赖如下:
<dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>5.10.2</version> <scope>test</scope> </dependency>
基本写法:@Test 方法中调用 assertXxx
每个测试方法必须是 public、无参、返回 void,并被 @Test 标记。内部用断言检查实际结果与期望是否一致:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 断言失败时,测试立即终止并抛出
AssertionError,JUnit 报告会显示具体哪行失败、期望值和实际值 - 常见断言示例(以 JUnit 5 为例):
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
class CalculatorTest {
@Test
void add_shouldReturnSum() {
Calculator calc = new Calculator();
int result = calc.add(2, 3);
assertEquals(5, result, "2 + 3 should equal 5"); // 第三个参数为失败时的自定义消息
}
@Test
void isEmptyList_returnsTrue() {
List<String> list = new ArrayList<>();
assertTrue(list.isEmpty(), "New list should be empty");
}
@Test
void divideByZero_throwsArithmeticException() {
Calculator calc = new Calculator();
assertThrows(ArithmeticException.class, () -> calc.divide(10, 0));
}
}
常用 assertXxx 方法及适用场景
掌握高频断言有助于精准表达校验意图:
-
assertEquals(expected, actual):适用于基本类型、字符串、实现了equals()的对象(注意:不校验引用,而是语义相等) -
assertNotEquals(unexpected, actual):确认结果不是某个特定值 -
assertTrue(condition)/assertFalse(condition):校验布尔表达式是否为真/假 -
assertNull(object)/assertNotNull(object):检查对象是否为空引用 -
assertSame(expected, actual)/assertNotSame(...):校验两个引用是否指向同一对象(用==判断) -
assertArrayEquals(expectedArray, actualArray):安全比较数组内容(避免equals()对数组返回 false) -
assertTimeout(Duration, Executable):验证代码是否在指定时间内完成
注意事项与最佳实践
写出清晰、可靠、可维护的测试需要关注几个细节:
- 每个
@Test方法应只验证一个关注点(单一职责),避免多个断言混杂导致失败时定位困难 - 为
assertEquals等提供有意义的失败消息(第三个参数),尤其在复杂业务逻辑中能显著提升排查效率 - 慎用
assertTrue(x == y)替代assertEquals(x, y)—— 后者在失败时能同时打印期望与实际值,前者只能显示布尔结果 - JUnit 5 中,
assertAll()可批量执行多个断言,即使某一个失败,其余仍会执行,适合验证多个独立属性(如对象字段)
@Test
void user_hasValidNameAndAge() {
User user = new User("Alice", 30);
assertAll("user fields",
() -> assertEquals("Alice", user.getName()),
() -> assertEquals(30, user.getAge()),
() -> assertNotNull(user.getId())
);
}

















