9

いくつかの調査を行ったところ、PowerMock が静的な Java メソッドをモックできることがわかりました。

誰かが (技術的に) PowerMock が JUnit や、​​できない、またはできない他のものと何が違うのか説明できますか? また、モックしようとしたときに静的メソッドが問題を引き起こしているのはなぜですか?

ありがとう

4

1 に答える 1

13

http://blog.jayway.com/2009/05/17/mocking-static-methods-in-Java-system-classes/

インスタンス メソッドをモックするために、サブクラスで単純にオーバーライドできます。「静的ポリモーフィズム」がないため、静的メソッドではそれを行うことはできません。

他の一般的なフレームワークはポリモーフィズムに依存し、CGLIB でサブクラスを作成しますが、Powermock はバイトコードで動作するため、これを行うことができます。

リンクから:「基本的にすべての標準的なモック フレームワークは、CGLib を使用してモック オブジェクトを作成します。これは、それらが階層モデルに基づいていることを意味します (CGLib は、実際のモック オブジェクトである実行時にテストするクラスのサブクラスを作成します)。 PowerMock が MockGateway に委譲することによるバイトコード操作を通じて使用する委譲モデルの代わりに."

于 2011-03-23T08:23:34.227 に答える