2011-09-01 132 views
30

在这个post中,我问了一个小问题作为更大问题的一部分。由于我还没有得到答案,我在这里提出了我的问题:JUnit是否按顺序执行测试用例?

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

谢谢

+0

作为一个侧面说明,这里是一些更多关于使用JUnit 4.7并行执行测试:HTTP://计算器。com/questions/423627/running-junit-tests-in-parallel – mort

+0

如果您在Maven构建中使用JUnit,并且使用-T参数将构建设置为多线程(例如-T 4C),那么测试将在可能的情况下并行运行 –

回答

23

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

JUnit 4.6引入了一个实验ParallelRunner并行运行测试 - 我不知道它的当前状态。但我认为默认情况下并行性仍然是“选择加入”功能。 (通过其他答案判断,现在看起来这里保持不变,但仍然以略微不同的形式 - 并且仍然选择加入)。

+0

@FDinoff:是的,看起来现在很难找到4.6发行说明。我已删除链接。 –

+0

平行而不是按顺序运行测试通常会更好吗?我们必须有什么样的硬件才能并行运行测试? – testerjoe2

+0

这听起来像是除了调试以外确认序列的可接受方式吗?用10种测试方法创建一个测试类。在测试类中创建一个整数列表。每种测试方法将其在课堂上的位置输入到列表中。运行所有测试10次。每次,整数必须始终按正确的顺序。 – testerjoe2

4

强大而合理的猜测:是的,JUnit默认为单线程。

否则,人们不知道测试是否失败,因为代码被破坏,或者如果某些测试并行运行,则由于并发问题而失败。

+0

如果每个测试都使用自己的测试数据(并非总是可能),那么并行运行测试会更好吗? – testerjoe2

15

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

但不要忘了:

良好的自动化测试应该是独立的,孤立的,重复性好,使他们正在同时运行的理想人选。

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

+0

“良好的自动化测试应该是独立的,独立的和可重复的” - 只要测试数据创建过程不是太耗时间/资源消耗,我们是否可以通过为每个测试分开测试数据来实现这一目标? – testerjoe2

3

是,

而且还认为@before@after的存在,你可能有恢复的状态下试运行代码。

+0

你能解释一下吗? – testerjoe2

1

是的。正如评论中提到的那样,您应该仔细规划测试用例设置和拆卸(所有超类影响这些操作),以及测试套件设置和拆卸。我记得,就我所知,JUnit并不保证测试用例的执行顺序(也就是说,除非它们在套件中,我猜)。这很重要,应该促使您在测试之间执行非常精确的清理和SUT状态恢复,并避免依赖其他测试结果的测试用例。你可能会说这是一种反模式:)。

-1

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

@Test 

public ..... firstTest() 
{ 

} 

@Test 

public .... thirdTest() 
{ 

} 

@Test 

public....secondTest() 
{ 

} 

的顺序是firstTest,thirdTest,secondTest