我正在使用 PowerMock 在 上模拟静态方法JOptionPane
,但 JRE 似乎不太符合它,因为我java.lang.VerifyError
在初始化时得到了一个,因为它检查了自己的包和类的完整性。
我有一些解决方法,但我对其中任何一个都不满意:
JOptionPane
为我需要的方法(showInputDialog
等)编写一个对象包装器并提供一个接口,这样我就可以注入一个模拟或存根进行测试。这只是将问题转移到其他地方,因为我仍然需要涵盖我的包装方法,但至少它们将与逻辑隔离。使用JOptionPane
类引用的实例来调用它的方法(我认为模拟实例不会有任何问题,因为类不是最终的)。缺点是我会收到很多“在实例变量上调用静态方法”的警告,但这是要付出的代价。根本不要模拟
JOptionPane
并使用Robot
触发输入事件来处理它。这可能非常麻烦而且不太健壮......除此之外,我正在使用内部对话框,这需要额外的工作来设置JDesktopPane
,JInternalFrame
s 等等。
还有其他想法或建议吗?
谢谢!
更新:顺便说一句,我尝试过模拟一个JOptionPane
实例,似乎方法调度程序忽略了实例,直接选择了以前存在的静态方法(毕竟这是有道理的),所以第二个选项被丢弃了。