当我运行在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
}
}
你有几个简单的解决方案:
在具体试验方法定义变量
将其添加为一个实例变量的测试类
创建一个安装方法,并对其进行批注@Before
Answer 8:
对我来说,这是由于该项目得到了构建路径的问题。 我的Maven依赖配置需要更新。
Answer 9:
我有这个问题,并把一个“@Test”之前的测试方法解决它!
像这样:
@Test public void testOne() { // ... assertTrue(1 == 1); }
Answer 10:
这是两个场景是无根的错误出现。
如果你已经错过了测试前的注释@Test。
@测试
公共无效FOO(){}
如果它是一个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