junit最简测试类需用@test标注方法、assertequals等断言验证结果,并遵循包名一致、类名以test结尾的规范;使用junit 5时导入org.junit.jupiter.api.*,断言格式为assertequals(期望值, 实际值)。

JUnit 是 Java 最常用的单元测试框架,编写测试用例的核心是用 @Test 标注方法、用断言验证行为,并借助生命周期注解控制测试准备与清理。
写一个最简测试类
测试类通常和被测类在相同包名下(但放在 src/test/java 目录),类名习惯以 Test 结尾。例如测试 Calculator 类:
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class CalculatorTest {
@Test
void add_returnsCorrectResult() {
Calculator calc = new Calculator();
int result = calc.add(2, 3);
assertEquals(5, result); // 断言:期望值在前,实际值在后
}
}
注意:使用 JUnit 5 时导入 org.junit.jupiter.api.*,不是旧版的 org.junit.Test。
常用断言方法
断言用于验证代码执行是否符合预期,失败时会抛出异常并显示错误信息:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
-
assertEquals(expected, actual):比较两个值是否相等(对对象调用equals()) -
assertTrue(condition)或assertFalse(condition):检查布尔表达式 -
assertNull(object)/assertNotNull(object):检查对象是否为空 -
assertThrows(ExcType.class, () -> { ... }):验证某段代码是否抛出指定异常 -
assertTimeout(Duration.ofMillis(100), () -> { ... }):确保代码在限定时间内完成
测试前准备与后处理
用生命周期注解管理共享资源,避免重复创建或遗漏清理:
-
@BeforeEach:每个@Test方法执行前运行(适合初始化对象) -
@AfterEach:每个@Test方法执行后运行(适合关闭连接、重置状态) -
@BeforeAll:整个测试类所有方法开始前运行一次(需为static方法) -
@AfterAll:整个测试类所有方法结束后运行一次(也需static)
示例:
class DatabaseServiceTest {
private DatabaseService service;
@BeforeEach
void setUp() {
service = new DatabaseService("test-db");
service.connect();
}
@AfterEach
void tearDown() {
service.disconnect();
}
@Test
void query_returnsData() {
List<string> data = service.query("SELECT name FROM users");
assertNotNull(data);
}
}
</string>
参数化测试(JUnit 5)
当需要对同一逻辑用多组输入验证时,用 @ParameterizedTest + 数据源注解更简洁:
-
@ValueSource(strings = {"a", "bb", "ccc"}):提供简单值列表 -
@CsvSource({"1,2,3", "2,3,5"}):按 CSV 行提供多参数 -
@MethodSource("provideTestData"):引用静态方法返回Stream<arguments></arguments>
示例:
@ParameterizedTest
@CsvSource({"1,1,2", "0,5,5", "-3,3,0"})
void add_handlesMultipleInputs(int a, int b, int expected) {
assertEquals(expected, new Calculator().add(a, b));
}
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










