JUnit 5 使用相同的@Order(#) 测试方法会发生什么?

JUnit 5 What happens to test methods with the same @Order(#)?

我正在使用 JUnit 5 来​​测试我的 RESTful 应用程序。我有一个测试 class,其中测试方法用 @Order(#) 注释。知道当相同的订单号用于某些测试方法时会发生什么吗?它们会 运行 并行吗?

它们不会并行执行。排序确保根据它们的值对彼此相邻的测试执行顺序进行排序。

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

  @Test
  void test0() {
    assertEquals(2, 1 + 1);
    System.out.println("Test0");
  }

  @Test
  @Order(1)
  void test1() {
    assertEquals(2, 1 + 1);
    System.out.println("Test1");
  }

  @Test
  @Order(1)
  void test2() {
    assertEquals(2, 1 + 1);
    System.out.println("Test2");
  }

} 

在此示例中,test1test2 具有相同的订单号,测试执行将是:test1 -> test2 -> test0.

JUnit 5 在内部执行以下排序操作:

@Override
public void orderMethods(MethodOrdererContext context) {
    context.getMethodDescriptors().sort(comparingInt(OrderAnnotation::getOrder));
}

.sort() 来自 java.util.List.

如果你想并行执行测试,你可以用JUnit 5 in a different way配置。