Psy*_*nch 0 java powermock java-8
我想PowerMockerRule在我的单元测试中使用,以便我可以在使用Spring的JUnit Runner运行它们时使用PowerMockito.但是,当我将规则添加到我的测试中时,我得到了java.lang.VerifyError.
java.lang.VerifyError: Expecting a stackmap frame at branch target 47
Exception Details:
Location:
com/sample/package/MyClass.<init>(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V @25: if_icmpge
Reason:
Expected stackmap frame at this location.
Bytecode:
0x0000000: 2a2b 2c01 c000 32b7 0050 2d3a 0419 04be
0x0000010: 3605 0336 0615 0615 05a2 0016 1904 1506
0x0000020: 323a 072a 1907 b600 4984 0601 a7ff e9b1
0x0000030:
Run Code Online (Sandbox Code Playgroud)
到目前为止我所做的一直是根据我的初始搜索将我的javassist依赖关系更新为3.20.0-GA,这通常是问题所在.但是,它仍然无法解决我的问题.还有其他想法吗?
小智 5
首先是关于你的问题的根本原因.JVM验证用户类以确保该类是"安全的"并且它不会违反某些规则.现在在热点中有2个验证器:ClassVerifier(SplitVerifier)和旧验证器.新的验证程序(SplitVerifier)在java 6中添加并且是可选的.这个新的验证器在类文件(StackMapTable属性)中需要更多信息.此属性由编译器添加,它跟踪局部变量的类型.
问题是一些检测库可以修改你的代码并且不更新StackMapTable(因为bug或库很旧而且不知道这个属性)
如何解决(选择一个):
-Xverify:none