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 项目 中获取。


» 下一篇: Java Weekly, 第208期