PowerMock
ライブラリからクラスの静的呼び出しをモックアウトすることが、または他のライブラリで可能かどうか疑問に思っています。そのサードパーティ ライブラリのクラスは、rt.jar のクラスの 1 つを呼び出します。その return のカスタム実装を返したいと思いType
ます。テストコードの外でこれをやろうとしています。
そうでなければ、そのライブラリからいくつかのクラスを拡張し、いくつかの実装を置き換える必要がありました。誰かが前にこのようなことをしたことがありますか?
PowerMock
ライブラリからクラスの静的呼び出しをモックアウトすることが、または他のライブラリで可能かどうか疑問に思っています。そのサードパーティ ライブラリのクラスは、rt.jar のクラスの 1 つを呼び出します。その return のカスタム実装を返したいと思いType
ます。テストコードの外でこれをやろうとしています。
そうでなければ、そのライブラリからいくつかのクラスを拡張し、いくつかの実装を置き換える必要がありました。誰かが前にこのようなことをしたことがありますか?
はい、可能です。たとえば、PowerMock.mockStatic()
orを使用してPowerMock.mockStaticPartial()
、1 つのメソッドのみをモックする場合にのみ使用できます。
PowerMock のホームページに非常に優れたチュートリアルがあります。
SO に例を投稿しました。
[編集] ただし、本番コードでそのような魔法を実行したい場合は、テスト フレームワークを使用しないことをお勧めします。多分Groovyはそれを助けることができます.Groovyでは実行時にクラス(JDKクラスでさえも)を操作することが可能であり、それは(私が思うに)JVMの上のより薄い層です.
一般的に言えば、そのような筋金入りのスタブを行うのは本当に悪い考えです (それはあなたが説明したことを嘲笑しているわけではありません)。このライブラリに小さな抽象化を構築して、何を返したいかを完全に制御できるようにします。PowerMock の一部の機能をテスト外で使用することは可能ですが、これは簡単なことではありません。ここに、本当に必要な場合に役立つ大まかな説明があります: https://groups.google.com/d/msg/powermock/SMDMe-y6fLg/1HF0TsGOqTIJ
とにかく、私はそれをすることをお勧めしません。