我们的项目使用jmockit 0.999.11来模拟JUnit 4.11和TestNG 6.9.4测试类和套件的对象。我们使用Maven作为依赖性管理工具,并用于编译和执行这些测试用例(Windows操作系统)。
最近,我们已将项目从JDK 7迁移到JDK 8(1.8.0.25)。从那时起,当我尝试执行测试用例时,jmockit给出了一个错误说
运行TestSuite
java.lang.IllegalStateException:JMockit需要Java 5 VM或更高版本。
我检查了各种博客,并确保classpath在junit jar之前有jmockit jar。有关添加jdk tools.jar的其他说明特定于Mac OS。
所以我无法弄清楚还需要什么,以便jmockit 0.999.11可以成功识别JDK 8(u25)。升级JMockit jar将是我们的最后手段,我们希望尽可能避免它。
答案 0 :(得分:1)
它的长短是你需要升级到更高版本的jmockit。当jmockit启动时,它在AgentInitialization中使用这段代码:
boolean initializeAccordingToJDKVersion() {
String jarFilePath = discoverPathToJarFile();
if (Startup.jdk6OrLater) {
return new JDK6AgentLoader(jarFilePath).loadAgent();
} else if ("1.5".equals(Startup.javaSpecVersion)) {
throw new IllegalStateException("JMockit has not been initialized. Check that your Java 5 VM has been started with the -javaagent:" +
jarFilePath + " command line option.");
} else {
throw new IllegalStateException("JMockit requires a Java 5 VM or later.");
}
}
Startup.jdk6OrLater确定:
static final boolean jdk6OrLater = ("1.6".equals(javaSpecVersion)) || ("1.7".equals(javaSpecVersion));
public static boolean isJava6OrLater() {
return jdk6OrLater;
}
您可以看到问题所在。我会给他们提供他们选择的疑问,以便对高于1.5的版本进行硬编码,但它仍然令人沮丧。
看起来1.8适用于Java 8.可能有早期版本也可以使用,但1.8适用于我的同类群组,因此我决定坚持使用它。或者,降级到Java 7也应该可以解决问题。