2016-04-03 77 views
5

我的项目中有一个JUnit测试类,它是逐步更新的 - 我每隔几周添加一次测试,有时修改测试代码。令人惊讶的是,当我使用eclipse JUnit Runner 4运行测试类时,它运行我的旧代码(更新之前)而不是新代码。我可以更改代码,添加或删除测试,但它仍然运行旧代码。单元测试类在eclipse中运行旧版本

我试图找出问题并运行我刚刚编写的单个测试,并且在没有任何堆栈跟踪的情况下得到臭名昭着的“Unrooted tests”错误,以便让我知道问题所在。

JUnit runner response. test7() is indeed within the compiled test class

我做了一些研究,并根据这里的几个其他线程,很多人都遇到过这个问题,关于JUnit的3 \ JUnit 4中的兼容性,但在这里,这是不是这样的 - 我标注了所有的考试与@Test,我不扩展TestCase类。

清理/建立所有的eclipse项目并没有帮助。 但是,这个问题在我干净安装我的项目时会自行工作,但这需要太多时间。 此外,重命名类(在eclipse中的Alt + Shift + R)获取新代码立即运行,但将其重命名回其原始(和有效)名称,获取旧代码再次运行(WTF?)

帮助,将不胜感激, 10x

+1

如果它运行的是旧代码,它**有**旧代码,无论是在源代码或编译。你是否有旧的代码,甚至可能是在正好在类路径中的.jar中? – Harald

+0

我想我在某个地方,但假设eclipse已经编译它(它做了),是不是日食亚军应该运行它被指示运行的代码? – KidCrippler

+2

是否有可能以Eclipse的配置方式让测试运行器使用'target'下的编译类,但Eclipse编译器正在输出到不同的文件夹(默认情况下是'bin')?这可以解释为什么Maven构建解决了这个问题。 – sisyphus

回答

0

我设法解决我自己的问题(灵感来自Harlard贡献的评论)。 在检查了我的项目的目标目录后,我注意到其中的测试类目录不包含我的测试的二进制文件。 然后我注意到我错误放置了src/test/java中的类,并将它们放入与我的项目的包结构不一致的包结构中,它们是src/test/java的直接子目录。 因此,eclipse没有把它们放在正确的位置,并且为它们生成二进制文件的唯一方法是通过执行maven构建。 将所有我的测试类重构为正确的包结构后,所有工作都完美无缺。

+0

谢谢。我必须在我的'.classpath'文件中明确指定'output'目录才能使其工作:''。在此之前,我没有'output'部分,因此在'target'目录下编译了版本,但没有在Eclipse中执行Junit执行的正确位置。 –

0

另一种解决方案是手动删除项目的“目标”文件夹并重建它。这应该解决所有这类问题。