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