2010-11-26 101 views
4

我有一套使用Eclipse运行的44个JUnit测试(我从其他人那里获得了这些测试 - 我是JUnit测试的新手)。当我把它们放在一起时,其中24个失败。但是,如果我单独运行失败的人,其中一些人毕竟会传球。测试需要一点时间 - 例如,一个失败的测试需要大约一到两分钟的时间才能完成,而只需几秒钟就可以完成所有测试。JUnit测试在eclipse中失败时一起运行

我正在启动多个测试,方法是右键单击它们所在的文件夹并选择“Run As - > JUnit Test”。我正在使用JUnit 3.我在开始时做了什么错误/是否存在某种我缺少的选项?

回答

9

很难肯定地说没有看到测试,但它听起来像他们共享某些状态或资源,未被正确重置为下一个测试。

+0

在我的情况下,它是私人静态变量正在改变。每次测试后我都必须重置变量。使用@After注释标记清理方法。 – ZakiMak 2015-06-17 19:10:18

3

GaryF的回答是一种可能性。另一个原因是测试具有竞争条件:测试是否成功取决于某事发生的速度(可能因O/S的变幻莫测而异)。如果你单独运行失败的测试,他们总是成功或他们有时失败。如果他们有时失败了,那么你可能有种族条件。

+0

我现在不能检查,因为代码在工作,但是我尝试了4或5次,他们总是成功。我也没有选择JUnite代码中的任何内容来向我暗示其中存在时间条件。 – pyvi 2010-11-26 19:24:26

+0

@pyvi然后GaryF的情景与证据更加一致。 – 2010-11-27 00:33:50

5

要扩大Gary的答案,当右键单击并执行Run As - > JUnit时,不能保证测试的运行顺序,这也可能有助于破坏共享资源。

我会先看看您的setup()和teardown()方法,以确保共享资源正确重置。此外,由于您继承了这些测试,因此您可能需要查看是否有任何测试相互依赖。虽然这是一种不好的做法,应该改变,但你也许可以创建一个测试套件()来确保它们的运行顺序(至少在重新分解和分离测试之前)。