Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JUnit的版本在运行时和编译时不同?_Java_Eclipse_Junit - Fatal编程技术网

Java JUnit的版本在运行时和编译时不同?

Java JUnit的版本在运行时和编译时不同?,java,eclipse,junit,Java,Eclipse,Junit,我对JUnit测试突然停止运行有一个很大的问题。问题是我使用了TemporaryFolder.newFile(),这是一个相对较新的方法,尽管一切都可以编译,但在运行时我得到了一个NoSuchMethodError。通过maven/tycho命令行,一切都按预期进行 但我真正不明白的是:据我所知,唯一可用的JUnit版本是4.11,所以我不知道如何在运行时使用不同的版本 @Rule public TemporaryFolder tempFolder = new TemporaryFolder()

我对JUnit测试突然停止运行有一个很大的问题。问题是我使用了TemporaryFolder.newFile(),这是一个相对较新的方法,尽管一切都可以编译,但在运行时我得到了一个NoSuchMethodError。通过maven/tycho命令行,一切都按预期进行

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

@Rule
public TemporaryFolder tempFolder = new TemporaryFolder();

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

好的,下面是发生的事情以及我最终如何诊断的:

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

我怎么找到的? 通过转到堆栈跟踪中出现的JUnit运行程序的类文件

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

与“via maven”相比,您所说的“运行时”到底是什么意思?您(失败)在一个可能提供自己版本的JUnit的IDE中运行测试吗?@AndersR.Bystrup是的,我所说的“运行时”是什么意思“在EclipseIDE中作为JUnit测试运行时”。我所说的“编译时”是指“在IDE中编译时”。在pom.xml中,当定义JUnit依赖项时,是否指定版本?您使用什么版本的java(java-version)?