JUnit 5:指定嵌套测试的执行顺序

Seb*_*n S 5 java unit-testing junit5

是否可以在具有固定执行顺序的其他一些测试之间执行多个嵌套测试?

例如

@TestInstance(Lifecycle.PER_CLASS)
@TestMethodOrder(OrderAnnotation.class)
class MyTest {

    private State state = State.ZERO;

    @Test
    @Order(1)
    public void step1() throws IOException {
        state = State.ONE;
    }

    @Order(2)  // sth like this, however this annotation isn't allowed here
    @Nested
    class WhileInStateOne {

        @Test
        public void step2a {
            Assumptions.assumeTrue(state == State.ONE);

            // test something
        }

        @Test
        public void step2b {
            Assumptions.assumeTrue(state == State.ONE);

            // test something else
        }

    }

    @Test
    @Order(3)
    public void step3() throws IOException {
        state = State.THREE;
    }

}
Run Code Online (Sandbox Code Playgroud)

我知道,单元测试通常应该是无状态的,但是在这种情况下,如果我可以以固定顺序重用状态,我可以节省大量执行时间。

Sam*_*nen 6

否。嵌套类中的测试总是在封闭类中的测试之后执行。这是无法改变的。

测试方法的排序仅适用于单个测试类中的方法。

  • @VincentMassol 从 5.8.0 开始,您可以控制嵌套类的执行顺序。查看发行说明,第二点:https://junit.org/junit5/docs/5.8.0/release-notes/index.html#new-features-and-improvements-3 GitHub 中的问题:https: //github.com/junit-team/junit5/issues/2699 (5认同)
  • 那么当您有多个 @Nested 测试时会发生什么?顺序是什么?如何使订单具有预测性?AFAIK 嵌套测试是用来组织您的测试套件的。因此,例如,您可以将一个大型测试类(在所有测试上都有 Order 注释)重构为几个嵌套测试类,但是如果您无法控制嵌套测试的顺序,那么您就无法进行此重构,因为您'我们将失去订单。谢谢 (2认同)