Lau*_*uri 22 java powermock maven javassist
将JDK升级到java7u65后,利用Mockito和PowerMock的几个单元测试开始失败,原因如下:
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
Run Code Online (Sandbox Code Playgroud)
Lau*_*uri 48
UPDATE
有更新的java7版本可以解决此问题.正如回复Powermock/Javassist所写,为JDK 1.7.0u65和1.8.0u11创建非法构造函数,其中-target为7#525
从java 7u71升级到7u75解决了这个问题
根本原因
经过调查,我听到了来自互联网上所有基于JDK的工具和语言的帮助.
原因是新的验证程序检查了新的java字节码标准.但不幸的是,javassist有时会被powermock要求产生字节码的变化,这些变化不再被这个新的闪亮的非常有效.
解决方法(对于那些不能使用较新java的人)
作为一种变通方法JRebel的博客,他们建议使用-noverify在启动JVM标志,但是我发现从Java 7的字节码校验:JVM的巨大倒退博客中可选的解决方法是在java7工作:-XX:-UseSplitVerifier
由于我的测试在一些无法访问的服务器上运行并作为maven构建的一部分执行,我需要找到一种方法将该参数与我的项目文件一起传递.我发现的第一个可行的解决方案是将此参数添加到pom.xml中的surefire插件的configurtaion,如下所示:
<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>
Run Code Online (Sandbox Code Playgroud)
我想在java8上可以使用类似的方法用-noverify键调用测试,但还没有机会确认.
其他相关资源值得关注
Powermock/Javassist是创建JDK 1.7.0u65和1.8.0u11违法建设者与-target 7 Powermock/Javassist是用-target 7#525创造了JDK 1.7.0u65和非法建设者1.8.0u11
| 归档时间: |
|
| 查看次数: |
13000 次 |
| 最近记录: |