【问题标题】:Running a set of @Order ordered JUnit5 tests multiple times多次运行一组@Order 排序的 JUnit5 测试
【发布时间】:2020-07-07 11:35:09
【问题描述】:

我想知道是否有一种直接的方法可以使用 JUnit5 多次运行一组有序测试,而不是使用 @RepeatedTest 注释多次运行每个测试。

例如,我的测试:

   @Test
   @Order(1)
    public void myFirstTest()  {

      //code here

    }

   @Test
   @Order(2)
    public void myFirstTest()  {

      //code here

    }

   @Test
   @Order(3)
    public void myFirstTest()  {

      //code here

    }

我希望它们按 1-3 顺序运行,但在序列完成后重复。这可以在 JUnit 5 中轻松完成还是@RunWith(Parameterized.class) 仍然是最简单的方法,如here 所述

【问题讨论】:

    标签: junit junit5 parameterized


    【解决方案1】:

    @RunWith(Parameterized.class) 在 JUnit 5 中不起作用。 您可以使用自己的启动器。这可能是矫枉过正,但它的工作原理。

    需要重复测试的测试类:

    @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
    @Disabled
    public class OrderedExampleTest {
    
        @Test
        @Order(1)
        public void shouldRunFirst() {
            System.out.println("First!! ");
        }
    
        @Test
        @Order(2)
        public void shouldRunSecond() {
            System.out.println("Second!!");
        }
    
        @Test
        @Order(3)
        public void shouldRunThird() {
            System.out.println("Third!!");
        }
    }
    

    然后在一个单独的类中,一个特殊的测试方法将多次重新运行整个类:

    public class ExternalRunnerTest {
    
        @Test
        public void shouldRepeatTestClass() {
            LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
                    .selectors(
                            selectPackage("org.igorski.repeated"),
                            selectClass(OrderedExampleTest.class)
                    )
                    .configurationParameter("junit.jupiter.conditions.deactivate", "org.junit.*DisabledCondition") 
                    .build();
    
            Launcher launcher = LauncherFactory.create();
    
            int numberOfRepeats = 5;
            for(int i = 0; i < numberOfRepeats; i++) {
                launcher.execute(request);
            }
        }
    }
    

    OrderedExampleTest 已禁用。因此,当您一起运行所有测试时,它不应该单独运行。但是,特殊的重复测试将忽略禁用条件并运行测试。

    在我的情况下,打印:

    First!! 
    Second!!
    Third!!
    First!! 
    Second!!
    Third!!
    First!! 
    Second!!
    Third!!
    First!! 
    Second!!
    Third!!
    First!! 
    Second!!
    Third!!
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-23
      • 2020-09-10
      相关资源
      最近更新 更多