JUnit5 笔记

213 阅读1分钟

引入依赖, JDK 环境要在 Java 8 以上。

<dependency>
  <groupId>org.junit.jupiter</groupId>
  <artifactId>junit-jupiter-engine</artifactId>
  <version>5.5.2</version>
  <scope>test</scope>
</dependency>

// JUnit 5 参数化测试依赖
<dependency>
  <groupId>org.junit.jupiter</groupId>
  <artifactId>junit-jupiter-params</artifactId>
  <version>5.5.2</version>
  <scope>test</scope>
</dependency>

作者:闻人的技术博客
链接:https://juejin.cn/post/6844903943948992520
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

注释

  • @DisplayName
  • @BeforeAll
  • @AfterAll
  • @BeforeEach
  • @AfterEach
  • @Disabled
  • @Nested
  • @RepeatedTest
  • @ValueSource
  • @CsvSource
  • @EnumSource
  • @MethodSource
  • @ArgumentSource
@DisplayName("我的第一个测试用例")
public class MyFirstTestCaseTest {

    @BeforeAll
    public static void init() {
        System.out.println("初始化数据");
    }

    @AfterAll
    public static void cleanup() {
        System.out.println("清理数据");
    }

    @BeforeEach
    public void tearup() {
        System.out.println("当前测试方法开始");
    }

    @AfterEach
    public void tearDown() {
        System.out.println("当前测试方法结束");
    }

    @DisplayName("我的第一个测试")
    @Test
    void testFirstTest() {
        System.out.println("我的第一个测试开始测试");
    }

    @DisplayName("我的第二个测试")
    @Test
    void testSecondTest() {
        System.out.println("我的第二个测试开始测试");
    }
}
@DisplayName("我的第三个测试")
@Disabled
@Test
void testThirdTest() {
	System.out.println("我的第三个测试开始测试");
}
@DisplayName("内嵌测试类")
public class NestUnitTest {
    @BeforeEach
    void init() {
        System.out.println("测试方法执行前准备");
    }

    @Nested
    @DisplayName("第一个内嵌测试类")
    class FirstNestTest {
        @Test
        void test() {
            System.out.println("第一个内嵌测试类执行测试");
        }
    }

    @Nested
    @DisplayName("第二个内嵌测试类")
    class SecondNestTest {
        @Test
        void test() {
            System.out.println("第二个内嵌测试类执行测试");
        }
    }
}

断言

assertAll

org.junit.jupiter.api.Assertions#assertAll(java.lang.String, org.junit.jupiter.api.function.Executable...)

@Test
void testGroupAssertions() {
    int[] numbers = {0, 1, 2, 3, 4};
    Assertions.assertAll("numbers",
            () -> Assertions.assertEquals(numbers[1], 1),
            () -> Assertions.assertEquals(numbers[3], 3),
            () -> Assertions.assertEquals(numbers[4], 4)
    );
}

assertTimeoutPreemptively

org.junit.jupiter.api.Assertions#assertTimeoutPreemptively(java.time.Duration, org.junit.jupiter.api.function.Executable)

@Test
@DisplayName("超时方法测试")
void test_should_complete_in_one_second() {
    Assertions.assertTimeoutPreemptively(Duration.of(1, ChronoUnit.SECONDS), () -> Thread.sleep(2000));
}

assertThrows

@Test
@DisplayName("测试捕获的异常")
void assertThrowsException() {
    String str = null;
    Assertions.assertThrows(IllegalArgumentException.class, () -> {
        Integer.valueOf(str);
    });
}

附录

示例来自 Java单元测试之JUnit 5快速上手