gpt4 book ai didi

java - 从分支内部调用错误的 方法

转载 作者:IT老高 更新时间:2023-10-28 20:37:23 27 4
gpt4 key购买 nike

在将 JDK 升级到 java7u65 后,使用 MockitoPowerMock 的几个单元测试开始失败,原因如下:

15:15:23,807 INFO  - Tests in error: 
15:15:23,810 INFO - initializationError(com.your.ClassHere): Bad <init> method call from inside of a branch

最佳答案

更新

有更新的 java7 版本可以解决这个问题。正如回复 Powermock / Javassist creates illegal constructors for JDK 1.7.0u65 and 1.8.0u11 with -target 7 #525 所写的那样

upgrading from java 7u71 to 7u75 fixed the problem

根本原因

经过调查,我听到互联网上所有基于 JDK 的工具和语言都在呼救。

原来原因是新的验证程序检查了新的 java 字节码标准。但不幸的是,powermock 有时会要求 javassist 对字节码进行更改,这些更改不再被这个新的 Shiny 的非常器接受。

解决方法(适用于无法使用较新 java 的用户)

作为 JRebel blog 中的解决方法他们建议在启动 JVM 时使用 -noverify 标志但是我从 Java 7 Bytecode Verifier: Huge backward step for the JVM 找到适用于 java7 的博客文章替代解决方法:-XX:-UseSplitVerifier

由于我的测试在一些无法访问的服务器中运行并作为 maven 构建的一部分执行,我需要找到一种方法将该参数与我的项目文件一起传递。我发现的第一个可行的解决方案是将此参数添加到 pom.xml 中的surefire插件的配置中,如下所示:

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.10</version>
<configuration>
<argLine>-XX:-UseSplitVerifier</argLine>
</configuration>
</plugin>
<plugin>
</plugins>
</build>

我想在 java8 上可以使用类似的方法通过 -noverify 键调用测试,但还没有机会确认。

其他需要关注的相关资源

Powermock / Javassist creates illegal constructors for JDK 1.7.0u65 and 1.8.0u11 with -target 7. Powermock / Javassist creates illegal constructors for JDK 1.7.0u65 and 1.8.0u11 with -target 7 #525

关于java - 从分支内部调用错误的 <init> 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25428317/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com