JUnit的版本在运行时和编译时间之间有所不同吗?

时间:2013-11-08 10:06:06

标签: java eclipse junit

我有一个很大的问题,JUnit测试突然不再运行了。问题是我使用TemporaryFolder.newFile(),这是一个相对较新的方法,虽然一切都编译好,但在运行时我得到一个NoSuchMethodError。从命令行到maven / tycho,一切都按预期工作。

但我真正不理解的是:据我所知,唯一可用的JUnit版本是4.11,所以我不知道如何在运行时使用不同的版本?

@Rule
public TemporaryFolder tempFolder = new TemporaryFolder();

private File prepareInputFile(...) throws ... {
    File inputFile = tempFolder.newFile();
...
}

1 个答案:

答案 0 :(得分:2)

好的,这是发生了什么以及我最终如何诊断它:

我的测试包是我的项目包的一个片段。我的项目捆绑包依赖的捆绑包之一包括JUnit的版本,它比我的目标平台的版本旧。在Eclipse的编译时(以及涉及tycho时),使用目标平台版本(4.11.0)。但是当我通过Eclipse运行它作为JUnit测试时,JUnit类会被另一个包(显然包括JUnit 4.8.2)解析。

我是如何找到它的? 通过转到堆栈跟踪中出现的JUnit Runners的类文件。

解决方案? 没有真正令人满意的“Run as JUnit-test”解决方案,使用较旧的API解决了这个问题,但只是向其他人展示(Hamcrest matchers继承新的hamcrest API导致麻烦。“Run as Plug-in test”也给了我一些问题,但是我现在通过从运行配置中删除所有插件并仅添加依赖项来解决这个问题。