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

Java JUnit是否按顺序执行测试用例?,java,testing,junit,Java,Testing,Junit,在这篇文章中,我问了一个小问题作为一个大问题的一部分。因为我还没有得到回应,我把我的问题放在这里: 假设JUnit按顺序执行测试用例是否合理:一个测试用例在下一个测试用例开始之前结束。JUnit版本之间是否有差异(我的优先权在JUnit4上)?如果没有,是否有一种简单的方法强制JUnit按顺序执行测试 谢谢是的,默认情况下,我相信它会按顺序运行测试 JUnit4.6引入了一个实验性的ParallelRunner来并行运行测试——我不知道它的当前状态。不过,我希望并行性在默认情况下仍然是一个“选择

在这篇文章中,我问了一个小问题作为一个大问题的一部分。因为我还没有得到回应,我把我的问题放在这里:

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


谢谢

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


JUnit4.6引入了一个实验性的
ParallelRunner
来并行运行测试——我不知道它的当前状态。不过,我希望并行性在默认情况下仍然是一个“选择加入”特性。(从其他答案来看,这似乎是现在的情况,但形式略有不同-仍然选择加入。)

一个有力而合理的猜测:是的,JUnit默认为单线程


否则,您将无法知道测试是因为代码被破坏而失败,还是因为并发问题而失败(如果某些测试并行运行)。

从JUnit 4.7开始,就支持并行执行测试。但据我所知,这不是自动完成的,您特别需要对其进行配置,例如,如下所示:

但别忘了:


好的自动化测试应该是独立的、隔离的和可复制的,使它们成为并发运行的理想候选

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


还可以考虑在之前的,以及在之后的,在那里,您可能有一些代码可以恢复状态,以便下次运行测试。

是。正如评论中提到的,您应该仔细规划testcase设置和拆卸(所有超类都会影响这些操作),以及testsuite设置和拆卸


另外,就我所记得的第二点来说,JUnit不能保证测试用例的执行顺序(也就是说,除非它们在一个套件中,我猜)。这很重要,应该促使您在测试之间执行非常精确的清理和SUT状态恢复,并避免测试用例依赖于其他测试用例的结果。您可能会说这是一种反模式:)

根据我的经验,我可以说我们可以通过命名包含Test的方法名来序列化类中的测试。 例:


顺序是firstTest、thirdTest、secondTest

作为旁注,这里有一些关于使用JUnit 4.7并行执行测试的更多信息:如果在Maven构建中使用JUnit,并且使用-T参数(例如,-T 4C)将构建设置为多线程,那么测试将在可能的情况下并行运行“良好的自动化测试应该是独立的、隔离的和可复制的“-只要测试数据创建过程不太耗费时间/资源,我们可以通过为每个测试提供单独的测试数据来实现这一点吗?您能提供此引用的来源吗?此引用的来源似乎是2010年的DZone文章:一般来说,并行而不是顺序运行测试更好吗?”?为了并行运行测试,我们必须拥有什么样的硬件?这听起来像是确认顺序而不是调试的一种可接受的方式吗?创建一个包含10个测试方法的测试类。在测试类中创建整数列表。每个测试方法都将其在类中的位置输入列表中。运行所有测试10次。每次,整数的顺序都必须正确。@testerjoe2:老实说,我不相信这一点。我相信文档不仅仅是临时测试——很容易会有一些启发(例如“10种或更少方法的顺序测试,更多方法的并行测试”)会给出假阳性。如果每个测试都使用自己的测试数据(不总是可能的),那么并行运行测试更好吗?你能再解释一点吗?这不是问题的答案。嗯,测试可能不是按照那个确切的顺序运行的,这是一个基于特定顺序测试功能性的非常糟糕的设计。
@Test

public ..... firstTest ()
{

}

@Test

public .... thirdTest()
{

}

@Test

public....secondTest()
{

}