JUnit 5(一)

本贴最后更新于 1207 天前,其中的信息可能已经时过境迁

1、什么是JUnit5

JUnit5 是一个用于编写可重复测试的简单框架。目标是为Java测试创建一个最新的测试框架。这包括专注于 Java 8 及更高版本,以及启用许多不同风格的测试。

2、导入坐标

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

3、入门案例

public class Demo1 {

    @Test
    public void test() {
        System.out.println("JUnit5 testing...");
    }
}
输出结果:
JUnit5 testing...

4、常用注解

注解 描述
@Test 表示方法是测试方法。
@ParameterizedTest 表示方法是参数化测试。
@RepeatedTest 表示方法是重复测试的测试模板。
@TestFactory 表示方法是动态测试的测试工厂。
@TestTemplate 表示方法是测试用例的模板,设计为根据注册提供程序返回的调用上下文的数量多次调用。
@TestMethodOrder 用于为注解的测试类配置测试方法执行顺序。
@TestInstance 用于为带注释的测试类配置测试实例生命周期。
@DisplayName 声明测试类或测试方法的自定义显示名称。
@DisplayNameGeneration 为测试类声明一个自定义显示名称生成器。
@BeforeEach 表示被注解的方法应该在当前类中的每个 @Test@RepeatedTest@ParameterizedTest,或@TestFactory方法之前执行。
@AfterEach 表示该注释的方法应该被执行之后 每个 @Test@RepeatedTest@ParameterizedTest,或@TestFactory方法在当前类;
@BeforeAll 表示该注释的方法应该被执行之前 所有 @Test@RepeatedTest@ParameterizedTest,和@TestFactory方法在当前类。
@AfterAll 表示该注释的方法应该被执行之后 的所有 @Test@RepeatedTest@ParameterizedTest,和@TestFactory方法在当前类。
@Nested 表示被注解的类是一个非静态嵌套测试类。@BeforeAll@AfterAll方法不能直接在@Nested测试类中使用,除非使用每类测试实例生命周期。
@Tag 用于在类或方法级别声明过滤测试的标签;类似于 TestNG 中的测试组。
@Disabled 用于禁用测试类或测试方法;
@Timeout 如果测试、测试工厂、测试模板或生命周期方法的执行超过给定的持续时间,则用于使测试失败。此类注释是继承的
@ExtendWith 用于以声明方式注册扩展。
@RegisterExtension 用于通过字段以编程方式注册扩展。
@TempDir 用于在生命周期方法或测试方法中通过字段注入或参数注入提供临时目录;位于org.junit.jupiter.api.io包中。

5、元注解和组合注解

JUnit 注解可以用作元注释,这意味着可以自定义注释。

例如,直接用@Tag("fast"),如下:

@Tag("fast")
@Test
public void test2() {
    System.out.println("fast test");
}

可改为,先自定义一个@Fast注解,如下:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.junit.jupiter.api.Tag;

@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Tag("fast")
public @interface Fast {
}

在使用@Fast注解在方法或者类上,如下:

@Fast
@Test
public void test3() {
    System.out.println("fast test3");
}

还可以把@Test注解和@Fast组合成一个新的@FastTest注解,如下:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Tag("fast")
@Test
public @interface FastTest {
}

使用@FastTest可以省略@Test注解,如下:

@FastTest
public void test4() {
    System.out.println("fast test4");
}
回帖
请输入回帖内容 ...