【问题标题】:Inconsistent stackmap frames at branch - Java8 Maven Unit Testing分支处的堆栈图帧不一致 - Java8 Maven 单元测试
【发布时间】:2025-12-09 20:45:01
【问题描述】:

首先我想提一下,我阅读了很多关于这个问题的信息,但没有找到任何解决方案。

我有一些单元测试类,我对另一个类使用模拟静态方法。然后,当我运行测试时,它会抛出“分支处的堆栈图帧不一致...”错误。

我尝试了所有为我所知的方法,例如-XX:-UseSplitVerifier 或 -noverify 参数添加到 maven surefire 插件,但它们都不能正常工作。我一直都有相同的状态。

我尝试更改 PowerMock 的版本 - 旧的和最新的 - 没有任何改变。

我使用库: PowerMockito 1.62(使用Javassist 3.19.0-GA版本) Java 1.8 Maven 3.2.5

请告诉我,有没有可行的解决方案如何在 Java8+ 中避免这个问题?

感谢您的帮助!

【问题讨论】:

  • -XX:-UseSplitVerifier 不再适用于 Java 8。唯一的解决方案是将工具更新为具有正确堆栈图支持的版本。有十年的时间……
  • 您使用哪个版本的 maven-surefire-plugin?
  • 首先是 2.18.1,然后我将其更改为最后一个 - 2.19.1。没有任何改变。

标签: java maven unit-testing javassist powermockito


【解决方案1】:

字节码操作工具需要更新它们更改的代码的堆栈映射帧。否则,在您的情况下会抛出 VerifierError 。 Java 8 不再支持通过要求旧验证器 (-XX:-UseSplitVerifier) 来禁用堆栈映射帧的验证。

我假设您在 Javassist 中发现了一个错误,该错误可以识别堆栈映射帧并可能错误地发出它们。尝试更新到库的the latest version。如果这不起作用,请创建错误的重现并提交错误。

【讨论】: