我们的项目使用jmockit 0.999.11来模拟JUnit 4.11和TestNG 6.9.4测试类和套件的对象。我们使用Maven作为依赖项mgmt工具,并用于编译和执行这些测试用例(Windows OS)。
最近,我们已经将项目从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将是我们的最后选择,我们希望尽可能避免使用它。

最佳答案

总而言之,您需要升级到更高版本的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也可以解决问题。

关于jmockit - jmockit 0.999.11无法在Windows OS上识别jdk 8,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30589576/

10-11 10:32