【问题标题】:Unit test class runs old version in eclipse单元测试类在eclipse中运行旧版本
【发布时间】:2016-04-03 11:05:03
【问题描述】:

我的项目中有一个 JUnit 测试类,它会逐步更新 - 我每隔几周添加一次测试,有时会修改测试的代码。

令人惊讶的是,当我使用 eclipse JUnit Runner 4 运行测试类时,它运行的是我的旧代码(更新之前)而不是新代码。我可以更改代码、添加或删除测试,但它仍然运行旧代码。

我试图隔离问题并运行我刚刚编写的单个测试并得到臭名昭著的“无根测试”错误,而没有任何堆栈跟踪来告诉我问题所在。

我做了一些研究,根据这里的一些其他线程,很多人在 JUnit 3 \ JUnit 4 兼容性方面遇到了这个问题,但这里不是这种情况 - 我用 @Test 注释我的所有测试,我不要扩展 TestCase 类。

清理/构建所有 Eclipse 项目没有帮助。 但是,当我 mvn clean install 我的项目时,这个问题确实可以解决,但这需要太多时间。 此外,重命名类(在 Eclipse 中按 Alt+Shift+R)使新代码立即运行,但将其重命名回其原始(有效)名称,使旧代码再次运行(WTF?)

我们将不胜感激, 10 倍

【问题讨论】:

  • 如果它运行旧代码,它旧代码,无论是源代码还是编译。您是否在某个地方有旧代码,甚至可能在恰好位于类路径中的 .jar 中?
  • 我想我在某个地方做了,但假设 eclipse 已经编译了它(它确实编译了它),那么 eclipse runner 不应该运行它被指示运行的代码吗?
  • 是否有可能您已将 Eclipse 配置为测试运行程序使用 target 下的已编译类但 Eclipse 编译器正在输出到不同的文件夹(默认为 bin )?这或许可以解释为什么 Maven 构建解决了这个问题。
  • @KidCrippler 您使用的是哪个 Eclipse 版本?这是需要提供的重要信息
  • @A.DiMatteo 当然,我的 Eclipse 版本是 Luna Service Release 1a (4.4.1)

标签: eclipse maven junit junit4 maven-surefire-plugin


【解决方案1】:

我设法自己解决了这个问题(灵感来自 Harlard 的评论)。 在检查了我的项目的目标目录后,我注意到其中的 test-classes 目录不包含我的测试的二进制文件。 然后我注意到我在 src/test/java 中放错了类,并将它们放在不符合我项目的包结构的包结构中,它们是 src/test/java 的直接子目录。 因此,eclipse 没有将它们放在正确的位置,为它们生成二进制文件的唯一方法是执行 maven 构建。 在将我所有的测试类重构为正确的包结构后,一切都运行良好。

【讨论】:

  • 谢谢。我必须在我的.classpath 文件中明确指定output 目录才能使其工作:<classpathentry kind="src" path="src/test/java" output="target/test-classes"/>。在此之前,我没有 output 部分,因此在 target 目录下有编译版本,但不在 Eclipse 中执行 Junit 的正确位置。
  • 就是这样。 Eclipse 正在编译您的测试用例,但可能会将它们放在其他地方。转到您的文件系统。仔细查看您的目标/测试类,并查看项目构建路径中的任何拼写错误,您可能指定了稍微不同的路径。尝试找出 Eclipse 存储类文件的位置。
【解决方案2】:

我有同样的问题。这是由于 .classpath 有缺陷。删除此 .classpath 并重新导入项目,生成正确的 .classpath 并修复环境。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-10
      • 1970-01-01
      • 1970-01-01
      • 2013-07-31
      • 2018-10-24
      • 2020-07-05
      • 1970-01-01
      • 2018-10-28
      相关资源
      最近更新 更多