无根试验(Unrooted Tests)

2019-06-27 06:48发布

当我运行在Eclipse中的所有测试(Eclipse的3.4“木卫三”),一个测试将在“无根试验”中列出。 我使用JUnit 3.8,这个特殊的测试扩展的TestCase。 我不认为这个测试和其它测试之间的任何差别。 我不记得看到这种情况发生在Eclipse 3.3(欧洲)。

澄清:

我们还没有转移到JUnit的4.0还,所以我们没有使用注解。 我也一派,这似乎是大多数人都具有JUnit 4中的问题,但我没有看到任何解决方案。 在这一点上测试通过本地和在CruiseControl的,所以我并不过分关注,但好奇。

当我第一次看到这一点,虽然,这是一个失败的测试,只有当与其他测试运行失败。 这使我下了兔子洞寻找一个解决“无根”的问题,我从来没有发现。 最后,我发现了另一个测试,这不是正确拆除的罪魁祸首。

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

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


Answer 2:

我得到了“无根检查”错误信息,以及和它走了神奇。 我相信这是由于这样的事实,我是使用Eclipse使用Maven项目。 当我加入到我的测试类的新方法,并把它@Test标注,它开始收到错误消息当我试图运行使用“运行方式JUnit测试”菜单选项,一个方法; 但是,一旦我跑了Maven构建无根测试消息消失,我相信,在未来的解决问题的办法。

运行一个Maven构建,因为它会刷新JUnit是使用类。



Answer 3:

如果你的类在其层次结构中的某处延伸TestCase的,你必须使用在下拉下运行配置中列出的JUnit 3测试亚军。 使用JUnit 4亚军(默认我相信)会导致在发生无根试验现象。



Answer 4:

指的是现在根本不存在的老方法 - 因为我改名为我的测试方法,然后试图通过点击相同的运行配置在Eclipse中运行测试,我得到这个错误。



Answer 5:

我们以确保我们的测试项目建成解决了这个问题。 我们在这不会让我们的测试类要编译的构建路径上出现了问题。 一旦我们解决了构建路径问题,编制了测试和“新”的方法才得以运行。 因此,我们可以假设“无根”的测试也意味着他们不会在编译的二进制存在。



Answer 6:

我从来没有见过这一点 - 但据我可以从谷歌略读了几分钟所知,这看起来好像它可能是在Eclipse中的错误,而不是与你的测试问题。 您不必在测试@Test注解,我承担? 你能吹离测试并重新创建它,如果是这样,你得到同样的错误?



Answer 7:

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

import org.junit.Test;

public class MyTest {

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

}

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

  1. 在具体试验方法定义变量

  2. 将其添加为一个实例变量的测试类

  3. 创建一个安装方法,并对其进行批注@Before



Answer 8:

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



Answer 9:

我有这个问题,并把一个“@Test”之前的测试方法解决它!

像这样:

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



Answer 10:

这是两个场景是无根的错误出现。

  1. 如果你已经错过了测试前的注释@Test。

    @测试

    公共无效FOO(){}

  2. 如果它是一个GWT项目,当同一对象的两个模拟的定义。 比方说,有一类A级和

    @GwtMock非公开A ATEST;

    @GwtMock私人甲一个; 那么这也将显示一个无根的测试误差。



Answer 11:

我曾与java.lang.NoClassDefFoundError同样的问题:组织/ hamcrest /自描述

你需要的jar hamcrest。 同样的问题14539072: java.lang.NoClassDefFoundError:组织/ hamcrest /自描述



Answer 12:

通过在运行配置从移的TestRunner版本4.0至3对于各个测试方法我可以在解决该问题。



Answer 13:

在您的测试类junit1.4不要继承junit.framework.TestCase,这应该解决的问题



Answer 14:

您正在使用Hamcrest? 或者其他库,以帮助在您的测试? 您未使用

import static org.junit.Assert.*;

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

import static org.hamcrest.MatcherAssert.assertThat;

或其他断言isn't JUnit的断言。



Answer 15:

原来,是我的构建路径中有一些错误......一些罐子人失踪。 我重新构建路径和它的工作!



Answer 16:

对我来说,问题是,如果有例外是在抛出@BeforeClass@AfterClass方法。 这也将导致测试被归类为无根。



Answer 17:

我得到这个错误与测试方法名称为“test”

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

我改名的方法和它的工作



Answer 18:

我通过不还宣布测试是遇到了这个问题static



Answer 19:

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

我在遇到此问题与该扩展的一个使用@RunWith(Parameterized.class)一类一会儿。

过了一会儿,我很抱歉,我不知道我所做的正是造成这一点,“无根试验”的消息就走了,但测试仍然没有正常运行。 本应在@参数方法接受参数的构造函数是从来没有得到所谓的; 执行跳下直接从@BeforeClass到@AfterClass。

该问题的解决方法是从它用的是4.8.1升级的JUnit,到最新版本(4.12)。 因此,也许可以帮助别人,将来别人。



Answer 20:

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

例如,纠正标记的测试方法:

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

- 随着Eclipse的插件的Junit,你也可以使用快捷菜单上的方法(例如,在包浏览器扩展的类和方法,并选择“testInsertCustomer()”方法,并从该项目中选择“运行方式>> JUnit测试”)运行测试方法。

如果您忘记“@测试”的标签,或者干脆方法是不是测试,而是使用作为工具为其他测试(例如“私人fillCustomerObject()”),则该方法没有一个(私人或不)常用方法需要“@测试”的标签,根本无法运行它作为一个JUnit测试!

这很容易,你可以创建一个实用的方法,以后你忘了该方法的真正目标,因此,如果您尝试运行它作为一个测试,JUnit会喊“无根试验”。



Answer 21:

对我来说,这个问题是由在抛出一个实时的意外创建@AfterClass方法(看看这里的文档):

基本上所有的测试方法成功,但在课程结束这种方法失败。 因此,所有的测试似乎正常,但在我的Eclipse的一个额外的“无根试验”失败。



文章来源: Unrooted Tests