2

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

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

@Rule
public TemporaryFolder tempFolder = new TemporaryFolder();

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

1 回答 1

2

好的,这就是发生的事情以及我最终如何诊断它:

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

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

解决方案?“作为 JUnit 测试运行”还没有真正令人满意的解决方案,使用较旧的 API 解决了这个问题,但只是显示了其他问题(Hamcrest 匹配器子类化较新的 hamcrest API 会导致麻烦。“作为插件测试运行”也给我带来了问题,但是我现在通过从运行配置中删除所有插件并仅添加依赖项来解决此问题。

于 2013-11-08T13:05:44.247 回答