JUnit5 测试用例默认的执行顺序规则是什么?

在 JUnit 5 中,测试用例的执行顺序默认是随机的。这是因为 JUnit 5 引入了并行执行测试的特性,为了更好地发现测试间的潜在问题,以及更好地利用多核处理器的优势。

默认情况下,JUnit 5 将测试类的所有测试方法分为不同的测试容器,并尝试并行运行这些容器。在每个测试容器内部,测试方法的执行顺序也是随机的。这意味着,每次运行测试时,测试方法的执行顺序可能会有所不同。

虽然默认的随机执行顺序可以提高测试的独立性和可靠性,但有时我们可能需要确保测试方法按照特定的顺序执行。为此,JUnit 5 提供了 @TestMethodOrder 注解和相应的 MethodOrderer 扩展点,可以自定义测试方法的执行顺序。

要自定义测试方法的执行顺序,你可以创建一个实现了 MethodOrderer 接口的类,并在测试类上使用 @TestMethodOrder 注解来指定使用的顺序规则。例如,可以使用 @TestMethodOrder(MethodOrderer.OrderAnnotation.class) 来按照 @Order 注解的顺序执行测试方法。

以下是一个示例:

import org.junit.jupiter.api.*;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class MyTest {

    @Test
    @Order(1)
    void test1() {
        // 测试逻辑
    }

    @Test
    @Order(2)
    void test2() {
        // 测试逻辑
    }

    // 其他测试方法...
}

在此示例中,@TestMethodOrder(MethodOrderer.OrderAnnotation.class) 指定了使用 @Order 注解的顺序规则。test1() 方法将在 test2() 方法之前执行,因为它们分别标记了 @Order(1)@Order(2) 注解。

需要注意的是,自定义的测试方法顺序只会对同一个测试类中的测试方法生效,不会影响其他测试类的执行顺序。如果你的测试用例需要严格按照特定的顺序执行,可以考虑将它们组织到同一个测试类中。