31

在 Eclipse(Eclipse 3.4 'Ganymede')中运行我的所有测试时,“Unrooted Tests”下列出了一项测试。我正在使用 Junit 3.8,这个特定的测试扩展了 TestCase。我看不出这个测试和其他测试有什么区别。我不记得在 Eclipse 3.3 (Europa) 中看到过这种情况。

澄清:

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

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

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

4

23 回答 23

21

最后我找到了解决方案。问题是您没有使用注释定义您的测试用例,而是仍在使用“旧方式”。一旦您转换为使用注释,您将能够再次运行一个测试。

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

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);
  }
}
于 2009-04-29T17:46:06.103 回答
16

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

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

于 2011-06-13T21:38:44.830 回答
12

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

于 2008-11-12T04:40:37.800 回答
6

我收到此错误是因为我重命名了我的测试方法,然后尝试通过单击相同的运行配置在 Eclipse 中运行测试 - 指的是现在不存在的旧方法。

于 2014-03-06T15:40:27.073 回答
3

我们通过确保构建了我们的测试项目来解决了这个问题。我们在构建路径中遇到问题,不允许编译我们的测试类。一旦我们解决了构建路径问题,测试编译并且“新”方法能够运行。所以我们可以假设“无根”测试也意味着它们不存在于编译的二进制文件中。

于 2011-08-22T14:07:31.800 回答
2

我从未见过这种情况——但据我浏览 Google 几分钟可以看出,这似乎是 Eclipse 中的一个错误,而不是您的测试的问题。我假设您在测试中没有 @Test 注释?你能把测试吹走并重新创建它,如果是这样,你会得到同样的错误吗?

于 2008-09-23T13:42:15.157 回答
1

导致此问题的另一种情况是我盲目地复制/粘贴需要参数的方法。IE

import org.junit.Test;

public class MyTest {

    @Test
    public void someMethod(String param) {
          // stuff
    }

}

你有几个简单的解决方案:

  1. 在具体的测试方法中定义变量

  2. 将其作为实例变量添加到测试类

  3. 创建一个设置方法并用@Before

于 2012-06-27T06:27:27.990 回答
1

我遇到了这个问题,并在测试方法解决它之前放了一个“ @Test ”!

像这样:

@Test public void testOne() { // ... assertTrue(1 == 1); }

于 2014-04-06T22:46:24.823 回答
1

这是 Unrooted 错误出现的两种情况。

  1. 如果你在测试之前错过了注解@Test。

    @测试

    公共无效 foo(){ }

  2. 如果它是一个 Gwt 项目并且定义了同一对象的两个模拟。假设有一类 A 类和

    @GwtMock 私人 A 证明;

    @GwtMock 私人 A a; 然后这也将显示 Unrooted 测试错误。

于 2014-10-03T16:59:02.467 回答
1

对我来说,这是由于项目遇到了构建路径问题。我的 Maven 依赖项配置需要更新。

于 2013-09-02T03:19:58.367 回答
1

您可以尝试的另一件事是将您的 JUnit 版本至少升级到 4.12。

我在使用 @RunWith(Parameterized.class) 的扩展类时遇到了这个问题。

过了一会儿,很抱歉我不知道我究竟做了什么导致这个,“无根测试”消息消失了,但测试仍然没有正确运行。应该接受来自@Parameters 方法的参数的构造函数永远不会被调用;执行直接从@BeforeClass 跳转到@AfterClass。

解决该问题的方法是将 JUnit 从它使用的 4.8.1 升级到最新的 (4.12)。所以也许这可以在未来帮助其他人。

于 2015-09-17T15:52:28.827 回答
1

我对 java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing 有同样的问题

你需要jar hamcrest。同样的问题 14539072: java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribeing

于 2015-09-29T07:24:30.520 回答
0

我收到此错误,测试方法名称为“test”

@Test 
public void test() {
 // ... assertTrue(1 == 1); 
}

我重命名了方法并且它有效

于 2014-07-30T05:24:15.997 回答
0

原来是我的构建路径有一些错误......一些罐子丢失了。我重新配置了构建路径,它工作了!

于 2012-11-11T10:00:58.380 回答
0

@BeforeClass对我来说,问题是在or@AfterClass方法中引发了异常。这也将导致测试被归类为无根测试。

于 2013-01-14T12:13:03.870 回答
0

我可以通过在单个测试方法的运行配置中从 TestRunner 版本 4.0 转换到 3 来解决这个问题。

于 2009-07-14T07:12:47.050 回答
0

您正在使用 Hamcrest 吗?或其他图书馆来帮助你的测试?你没有使用

import static org.junit.Assert.*;

检查您是否在测试中使用:

import static org.hamcrest.MatcherAssert.assertThat;

或其他断言不是 JUnit 断言。

于 2011-01-14T16:06:10.143 回答
0

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

于 2009-10-09T19:51:49.113 回答
0

我也没有将测试声明为static.

于 2015-05-21T19:12:44.843 回答
0

也许这只是对该方法目标的逻辑混乱。让我们记住:

例如正确的标记测试方法:

@Test
@Transactional
@Rollback(true)
public void testInsertCustomer() {  
    (...)
}

- 使用 Eclipse Junit 插件,您可以在方法上使用上下文菜单运行该测试方法(例如,在包资源管理器中扩展类和方法并选择“testInsertCustomer()”方法并从该项目中选择“Run as >> JUnit test”) .

如果您忘记了“@Test”标签,或者只是该方法不是测试,而是用作其他测试的实用程序的(私有或非私有)通用方法(例如“私有 fillCustomerObject()”),那么该方法不会需要“@Test”标签,而且你不能将它作为 JUnit 测试运行!

很容易创建实用程序方法,但后来您忘记了该方法的真正目标,因此如果您尝试将其作为测试运行,JUnit 会喊“Unrooted Tests”。

于 2017-03-21T13:23:37.063 回答
0

对我来说,这个问题是由方法中抛出的实时异常造成的@AfterClass(查看这里的文档):

基本上所有的测试方法都成功了,但在课程结束时,这个方法失败了。因此,所有测试似乎都很好,但在我的 Eclipse 上还有一个额外的“无根测试”失败了。

于 2018-10-19T15:23:07.897 回答
0

我在一个 Maven 项目中遇到了这些错误。我用 mvn clean install 重建项目。问题解决了

于 2020-04-20T11:21:56.793 回答
0

它实际上告诉我有一个带有注释的测试:@RunWith(MockitoJUnitRunner.class)

于 2020-08-20T19:56:11.767 回答