JUnit是否按顺序执行测试用例?

H-H*_*H-H 39 java testing junit

在这篇文章中,我问了一个小问题,作为更大问题的一部分.由于我还没有得到答复,我在这里提出我的问题:

假设JUnit按顺序执行测试用例是否合理:测试用例在下一个测试用例开始之前结束.它是否在JUnit版本之间有所不同(我的优先级是在JUnit4上)?如果没有,是否有一种简单的方法可以强制JUnit按顺序执行测试?

谢谢

Jon*_*eet 29

是的,默认情况下我相信它会按顺序运行测试.

JUnit 4.6引入了一个ParallelRunner并行运行测试的实验- 我不知道它的当前状态.我希望并行性默认仍然是"选择加入"功能.(从其他答案来看,看起来现在这里仍然存在,但形式略有不同 - 仍然选择加入.)


mor*_*ort 17

自JUnit 4.7以来,支持并行执行测试.但据我所知,它永远不会自动完成,你需要特别配置它,例如:http://java.dzone.com/articles/running-junit-tests-parallel

但不要忘记:

良好的自动化测试应该是独立的,隔离的和可重复的,使它们成为同时运行的理想候选者.

我不知道您为什么要问,但如果不符合上述标准,您可能需要考虑您的测试设计.

  • 你能提供这个报价的来源吗? (2认同)

And*_*s_D 5

一个合理而合理的猜测:是的,默认情况下,JUnit是单线程的。

否则,如果某些测试并行运行,则不会知道测试是否由于代码损坏而失败或由于并发问题而失败。


Far*_*mor 5

是的,

还要考虑一下@before@after您可能有一些代码可以恢复下一个要运行的测试的状态。


小智 5

默认情况下,JUnit 使用确定性但不可预测的顺序 (MethodSorters.DEFAULT) 运行测试。

在 Junit 5 中:如果您想按顺序运行测试

  • 使用@TestMethodOrder来控制测试的执行顺序。
  • 然后使用 @Order 注释强制测试按特定顺序运行。
  • 例子:

@TestMethodOrder(OrderAnnotation.class)
public class OrderAnnotationUnitTest {
    private static StringBuilder output = new StringBuilder("");

    @Test
    @Order(1)
    public void firstTest() {
        output.append("a");
    }

    @Test
    @Order(2)
    public void secondTest() {
        output.append("b");
    }

    @Test
    @Order(3)
    public void thirdTest() {
        output.append("c");
    }

    @AfterAll
    public static void assertOutput() {
        assertEquals(output.toString(), "abc");
    }
}
Run Code Online (Sandbox Code Playgroud)