无根测试

2022-09-01 10:27:16

在Eclipse(Eclipse 3.4 'Ganymede')中运行我的所有测试时,一个测试列在“无根测试”下。我使用的是 Junit 3.8,这个特殊的测试扩展了 TestCase。我看不出这个测试和其他测试之间有任何区别。我不记得在Eclipse 3.3(欧罗巴)中看到过这种情况。

澄清:

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

但是,当我第一次看到这个时,它是在一个失败的测试上,只有在与其他测试一起运行时才会失败。这使我进入了兔子洞,寻找我从未找到的“无根”问题的解决方案。最终,我在另一个没有正确拆除的测试中找到了罪魁祸首。

我同意,这似乎是一个Eclipse问题。


答案 1

最后我找到了解决方案。问题在于,您没有使用注释来定义测试用例,但仍然以“旧方法”进行。一旦您转换为使用注释,您就可以再次运行一个测试。

下面是使用注释的基本测试现在应该是什么样子的示例:

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);
  }
}

答案 2

我也收到了“无根测试”错误消息,它神奇地消失了。我相信这是因为我在Maven项目中使用了Eclipse。当我向 Test 类添加一个新方法并为其提供@Test注释时,当我尝试使用“作为 Junit 测试运行”菜单选项运行该方法时,它开始收到错误消息;但是,一旦我运行了一个maven构建,无根测试消息就消失了,我相信这是将来问题的解决方案。

运行 maven 构建,因为它将刷新 JUnit 正在使用的类。


推荐