无根测试

时间:2020-03-06 14:35:51  来源:igfitidea点击:

在Eclipse(Eclipse 3.4'Ganymede')中运行我的所有测试时,"无根测试"下列出了一个测试。我正在使用Junit 3.8,并且此特定测试扩展了TestCase。我看不到此测试与其他测试之间的任何区别。我不记得在Eclipse 3.3(Europa)中会发生这种情况。

澄清:

我们还没有迁移到JUnit 4.0,因此我们没有使用注释。我也用谷歌搜索,似乎大多数人都在使用JUnit 4时遇到问题,但是我没有看到任何解决方案。在这一点上,该测试在本地和CruiseControl中都通过了,因此我并不担心,但很好奇。

但是,当我第一次看到它时,它是在失败的测试中,只有在与其他测试一起运行时才会失败。这使我陷入困境,寻找解决方案,但从未找到。最终,我在另一项测试中找到了罪魁祸首,但没有正确拆除。

我同意,这确实像是Eclipse问题。

解决方案

我从未见过-但据我浏览Google几分钟所知,这似乎是Eclipse中的错误,而不是测试的问题。我假设我们在测试中没有@Test批注?我们可以吹走测试并重新创建它吗?如果这样做,我们是否会遇到相同的错误?

如果类将TestCase扩展到其层次结构中的某个位置,则必须使用运行配置下下拉列表中列出的JUnit 3测试运行器。使用JUnit 4运行程序(我相信是默认设置)会导致发生无根测试现象。

终于我找到了解决方案。问题在于我们不是在使用注释定义测试用例,而是仍然以"旧方式"进行操作。一旦转换为使用批注,我们将能够一次再次运行一项测试。

这是使用批注现在基本测试的外观示例:

import static org.junit.Assert.*; // Notice the use of "static" here
import org.junit.Before;
import org.junit.Test;

public class MyTests { // Notice we don't extent TestCases anymore

  @Before
  public void setUp() { // Note: It is not required to call this setUp()
    // ...
  }

  @Test
  public void doSomeTest() { // Note: method need not be called "testXXX"
    // ...
    assertTrue(1 == 1);
  }
}

我可以通过将单个测试方法的运行配置从TestRunner ver 4.0更改为3来解决此问题。

不要在测试类中使用junit1.4扩展junit.framework.TestCase,这应该可以解决问题