【发布时间】:2019-04-02 13:30:43
【问题描述】:
是否可以在其他一些测试之间以固定的执行顺序执行多个嵌套测试?
例如
@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;
}
}
我知道,单元测试通常应该是无状态的,但是在这种情况下,如果我可以按固定顺序重用状态,我可以节省大量执行时间。
【问题讨论】:
-
你不应该关心执行时间。让它们自动在您的管道上运行并在 LDEV 上跳过它 - 但您不应该按顺序运行它们。这是一个艰难的休息。
-
我怀疑像这样的 cmets,这就是为什么我写了我知道 test 不应该有状态的事实。但是也有例外,我故意打破了这个“规则”,因为在我的场景中这是有道理的(无论如何它更像是一个集成测试)。我不想进行基本的辩论,我只想知道如何实现我的要求;-)
-
文档显示嵌套测试确实支持排序。所以也在那里使用它。所以你的测试 nr 3 将是 5 并且嵌套测试是 Nr 3+4。
-
试过了,但是嵌套类中的测试仍然在外部类的测试之后执行
标签: java unit-testing junit5