ホームページ >Java >&#&チュートリアル >部分モックのために Mockito でメソッドを選択的にモックするにはどうすればよいですか?

部分モックのために Mockito でメソッドを選択的にモックするにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-20 20:11:10923ブラウズ

How Can I Selectively Mock Methods in Mockito for Partial Mocking?

選択的なメソッドのモックに Mockito を使用する

Mockito は、クラス内の特定のメソッドをモックする柔軟性を提供します。部分モックを活用することで、開発者は他のメソッドをそのままにして、どのメソッドをオーバーライドするかを選択できます。

たとえば、メソッド getPrice()、Stock クラスを考えてみましょう。 >getQuantity()、および getValue()。最初の 2 つのメソッドの戻り値をモックしたい場合がありますが、getValue() は元の動作を保持します。

Mockito で部分モックを使用すると、この精度を実現できます。

Stock オブジェクトはモックとしてインスタンス化されますが、getPrice()getQuantity() には特定の期待値が設定されます。以下に例を示します。

Stock stock = mock(Stock.class);
when(stock.getPrice()).thenReturn(100.00);
when(stock.getQuantity()).thenReturn(200);

getValue() に対して thenCallRealMethod() を呼び出すことで、実際の実装を保持します。

when(stock.getValue()).thenCallRealMethod();
あるいは、スパイは次のようにすることもできます。すべてのメソッドが最初に実際の実装を参照する場合に使用されます。明示的にスタブ化されたメソッドのみが、変更された動作を採用します。スパイのアプローチは次のとおりです。

Stock stock = spy(Stock.class);
when(stock.getPrice()).thenReturn(100.00);
when(stock.getQuantity()).thenReturn(200);
スパイを使用する場合、スタブ メソッド内で実際のメソッドを呼び出さないようにすることが重要であることに注意してください。

さらに別のオプションには、Mockito.CALLS_REAL_METHODS フラグが含まれます。

Stock MOCK_STOCK = Mockito.mock( Stock.class, CALLS_REAL_METHODS );
このアプローチは、スタブ化されていないメソッドを実際のメソッドに委譲します。

ただし、指定された Stock の例では、

price の両方に対する getValue() の依存関係により、この部分的なモック戦略は依然として失敗する可能性があります。ゲッターだけでなく、数量 を直接使用します。

さらに、次の場合はモックの完全な回避を検討してください。可能:

以上が部分モックのために Mockito でメソッドを選択的にモックするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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