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

3

我们的项目使用jmockit 0.999.11来模拟JUnit 4.11和TestNG 6.9.4测试类和测试用例。我们使用Maven作为依赖管理工具,并用它来编译和执行这些测试用例(在Windows操作系统上)。

最近,我们将项目从JDK 7迁移到了JDK 8(1.8.0.25)。自那时以来,当我尝试执行测试用例时,jmockit会报错:

运行测试套件

java.lang.IllegalStateException: JMockit需要Java 5或更高版本的VM。

我查阅了各种博客,确保classpath中jmockit的jar文件在junit之前。其他添加jdk tools.jar的说明是针对Mac OS的。

所以我不知道还需要什么,才能让jmockit 0.999.11成功地识别JDK 8(u25)。升级JMockit jar文件将是我们的最后一步,我们尽可能避免这样做。


看看这个网址:https://dev59.com/0nE85IYBdhLWcg3wLAUV 对我有用。 - Alex Quitiaquez
2个回答

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

0

JMockit有一种先进的方式来检查Java版本

static { jdk6OrLater = "1.6".equals(javaSpecVersion) || "1.7".equals(javaSpecVersion) || "1.8".equals(javaSpecVersion); }

这就是为什么如果你的javaSpecVersion包含一个与上述任何选项不同的字符串,它就无法工作的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接