ホームページ >Java >&#&チュートリアル >Mockito と PowerMock を使用して Java でオブジェクトを返す特定の静的メソッドをモックする方法

Mockito と PowerMock を使用して Java でオブジェクトを返す特定の静的メソッドをモックする方法

Susan Sarandon
Susan Sarandonオリジナル
2024-11-28 04:24:12473ブラウズ

How to Mock Specific Static Methods Returning Objects in Java Using Mockito and PowerMock?

特定の静的メソッドをモックしてオブジェクトを返す

Mockito と PowerMock は、静的メソッドをモックするための強力なサポートを提供します。ただし、単一の静的メソッドをモックしてオブジェクトを返すようにするのは難しい場合があります。

不一致と呼び出しの問題を回避する

オブジェクトの場合、戻り値の型の不一致を避けることが重要です。デフォルトの戦略 (オブジェクト値メソッドに対して null を返すなど) ですべての静的メソッドをモックすると、エラーが発生する可能性があります。

PowerMockito.mockStatic(Static.class, new Answer()) はすべてのメソッドをモックします。 、戻り値の型が異なる m2 も含まれます。同様に、静的メソッドが適切にモックされていないため、PowerMockito.when(Static.m1(param1, param2)).thenReturn(1000l) は呼び出されません。

静的モッキングとターゲット固有のメソッドを有効にする

解決策は、静的メソッドのモックとターゲットを絞ったメソッドの概念を組み合わせることですスタブ加工。 PowerMockito.mockStatic ではクラスの静的モックが有効になり、when-thenReturn 構文では特定のメソッドをスタブできます。

PowerMockito.mockStatic(Static.class);
when(Static.m1(param1, param2) ).thenReturn(1000l);

このアプローチにより、静的Static.class のすべてのメソッドをモックしますが、デフォルトのスタブ戦略をオーバーライドしません。 when-thenReturn を使用すると、m1 メソッドを明示的にスタブして 1000l を返します。

MockStatic オーバーロードを検討する

PowerMockito は、mockStatic 用に 2 つのオーバーロードを提供します。 1 引数のオーバーロード (mockStatic(Static.class)) を使用すると、デフォルトの戦略なしで静的モックが有効になります。 2 つの引数のオーバーロード (mockStatic(Static.class, Answer())) を使用すると、モックされたメソッドにデフォルトの戦略を提供できます。

特定のテスト シナリオに応じて、次のいずれかを使用することを選択できます。これらの過負荷の。特定のメソッドのみをモックしたい場合、またはさまざまなメソッド呼び出しに対して複数の戻り値を設定したい場合は、1 引数のオーバーロードがより適切です。

以上がMockito と PowerMock を使用して Java でオブジェクトを返す特定の静的メソッドをモックする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。