jmockit 0.999.11在Windows操作系统上无法识别jdk 8

时间:2015-06-02 07:08:48

标签: jmockit

我们的项目使用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将是我们的最后手段,我们希望尽可能避免它。

1 个答案:

答案 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也应该可以解决问题。