PowerMock を使用して の静的メソッドをモックしていますが、JRE は初期化時に独自のパッケージとクラスの整合性をチェックするJOptionPane
ため、あまり準拠していないようです。java.lang.VerifyError
私はいくつかの回避策を持っていますが、それらのどれにもあまり満足していません:
オブジェクト ラッパーを作成し、必要なメソッド (など)
JOptionPane
のインターフェイスを提供して、テスト用にモックまたはスタブを挿入できるようにします。showInputDialog
ラッパーメソッドをカバーする必要があるため、これは問題を別の場所に移動するだけですが、少なくともそれらはロジックから分離されます。クラス参照の代わりにインスタンスを使用して、JOptionPane
そのメソッドを呼び出します (クラスは最終的なものではないため、インスタンスのモックに問題はないと思います)。欠点は、「インスタンス変数で静的メソッドを呼び出しています」という種類の警告がたくさん表示されることですが、それは代償です。まったくモックしないで、それを処理するために入力イベントを発生させるために
JOptionPane
使用します。Robot
これは非常に面倒で、あまり堅牢ではない可能性があります...それに加えて、私は内部ダイアログを使用しており、 、 などを設定するために余分な作業が必要JDesktopPane
ですJInternalFrame
。
他のアイデアや提案はありますか?
ありがとう!
更新:ちなみに、私はインスタンスをモックしようとしましたJOptionPane
が、メソッドディスパッチャーがインスタンスを無視して、以前に存在していた静的メソッドを直接選択しているようです(結局のところ、それは理にかなっています)。そのため、2番目のオプションは破棄されます。