1. 概述
本文快速回顾 JUnit 的 @Test
注解。这个注解为执行单元测试和回归测试提供了强大工具。✅
2. Maven 配置
要使用 最新版 JUnit 5,需添加以下 Maven 依赖:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.10.2</version>
<scope>test</scope>
</dependency>
使用 test
作用域,避免 Maven 将此依赖打包进最终产物。⚠️
由于 Surefire 插件尚未完全原生支持 JUnit 5,**还需添加 provider**,告知 Maven 测试位置:
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>1.0.2</version>
</dependency>
</dependencies>
</plugin>
踩坑提醒:当前配置选用 Surefire 2.19.1,因为撰写时 2.20.x 版本与 junit-platform-surefire-provider
不兼容。❌
3. 待测方法
先构建一个简单方法,用于演示 @Test
注解能力:
public boolean isNumberEven(Integer number) {
return number % 2 == 0;
}
此方法当参数为偶数时返回 true
,否则返回 false
。接下来验证其行为是否符合预期。
4. 测试方法
针对示例,需验证两种场景:
- 输入偶数时,方法应返回
true
- 输入奇数时,方法应返回
false
测试实现将调用 isNumberEven
方法,传入不同参数并断言结果。为使方法被识别为测试,需添加 @Test
注解。一个类中可包含任意数量测试方法,但建议将相关测试归类。注意:测试方法不能是 private
或有返回值,否则会被忽略。
基于上述原则,编写测试方法:
@Test
void givenEvenNumber_whenCheckingIsNumberEven_thenTrue() {
boolean result = bean.isNumberEven(8);
Assertions.assertTrue(result);
}
@Test
void givenOddNumber_whenCheckingIsNumberEven_thenFalse() {
boolean result = bean.isNumberEven(3);
Assertions.assertFalse(result);
}
执行 Maven 构建时,Surefire 插件会扫描 src/test/java
目录下所有带注解的方法并执行,任何测试失败都会导致构建失败。⚠️
迁移提示:若你来自 JUnit 4,注意此版本注解不接受任何参数。超时或异常检测需改用断言:
@Test
void givenLowerThanTenNumber_whenCheckingIsNumberEven_thenResultUnderTenMillis() {
Assertions.assertTimeout(Duration.ofMillis(10), () -> bean.isNumberEven(3));
}
@Test
void givenNull_whenCheckingIsNumberEven_thenNullPointerException() {
Assertions.assertThrows(NullPointerException.class, () -> bean.isNumberEven(null));
}
5. 总结
本教程展示了如何使用 @Test
注解实现并运行简单 JUnit 测试。更多 JUnit 框架细节可参考这篇入门文章。
所有示例代码可在 GitHub 项目 中获取。