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");
}
}
在此示例中,test1
和 test2
具有相同的订单号,测试执行将是: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配置。
我正在使用 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");
}
}
在此示例中,test1
和 test2
具有相同的订单号,测试执行将是: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配置。