gpt4 book ai didi

模拟 Swing 静态方法时的 java.lang.VerifyError

转载 作者:搜寻专家 更新时间:2023-11-01 03:29:04 25 4
gpt4 key购买 nike

我正在使用 PowerMock 模拟 JOptionPane 上的静态方法,但 JRE 似乎不太符合它,因为我得到了一个 java.lang.VerifyError 在初始化时,它会检查自己的包和类的完整性。

我有一些解决方法,但我对其中任何一个都不是很满意:

  • JOptionPane 编写一个对象包装器并为我需要的方法(showInputDialog 等)提供一个接口(interface),这样我就可以注入(inject)模拟或用于测试的 stub 。这只会将问题转移到别处,因为我仍然需要覆盖我的包装器方法,但至少它们将与逻辑隔离开来。

  • 使用 JOptionPane 的实例而不是类引用来调用它的方法(我想模拟实例不会有任何问题,因为类不是最终的)。缺点是我会收到很多类似“在实例变量上调用静态方法”的警告,但这是我要付出的代价。

  • 根本不要模拟 JOptionPane 并使用 Robot 触发输入事件来处理它。这可能非常麻烦而且不是很健壮...除此之外,我正在使用内部对话框,这需要额外的工作来设置 JDesktopPaneJInternalFrame 等上。

还有什么想法或建议吗?

谢谢!

更新:顺便说一句,我试过模拟一个JOptionPane instance 并且似乎方法调度程序忽略了实例直接选择以前存在的静态方法(它毕竟是有道理的),所以第二个选项被丢弃。

最佳答案

  • JOptionPane 编写一个包装器 - 这绝对是最强大的选项,并且还允许您为自己编写方便的速记方法。我会选择这个。如果像我和大多数其他开发人员一样,您的项目中已经有一些 GUI 帮助程序类,他们可以去那里。

  • 使用实例 - 不错的解决方案,但绝对不像调用单个静态方法那么容易管理。我不会说增加的复杂性是值得的。

  • 使用 Robot 模拟输入 - 是的,这对我来说听起来非常脆弱。那时您变得依赖于 JOptionPane 的内部结构和实现细节,这不是一个好地方。 JOptionPane 的行为和按钮顺序也可能在不同的外观和感觉下有所不同(即确定、取消与取消、确定)。最后,这在 headless 环境中不起作用(尽管如果您已经在测试中使用 JOptionPane,并且计划始终在桌面计算机上进行测试,那么这不是问题)。

关于模拟 Swing 静态方法时的 java.lang.VerifyError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5471018/

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