ホームページ > Java > &#&チュートリアル > Mockito でメソッドを部分的にモックする方法: 他のメソッドを保持しながら特定のメソッドをモックする?

Mockito でメソッドを部分的にモックする方法: 他のメソッドを保持しながら特定のメソッドをモックする?

Barbara Streisand
リリース: 2024-12-05 13:26:11
オリジナル
755 人が閲覧しました

How to Partially Mock Methods in Mockito: Mocking Specific Methods While Preserving Others?

部分モッキング: Mockito での特定のメソッドのモック

クラスをテストする場合、動作を維持しながら特定のメソッドのみをモックする必要がある場合があります。他人の。 Mockito では、これは「部分モッキング」によって実現されます。つまり、選択したメソッドがモックされ、モックされていないメソッドは意図どおりに実行されます。

getPrice()、getQuantity()、および getValue( を含む次の Stock クラスを考えてみましょう。 ) メソッド:

public class Stock {
    ...
    public double getValue() {
        return getPrice() * getQuantity();
    }
}
ログイン後にコピー

テスト ケースで、getPrice() メソッドと getQuantity() メソッドをモックしたいが、getValue() はそのままにする場合通常に実行するには、次のように部分モックを定義できます。

Stock stock = mock(Stock.class);
when(stock.getPrice()).thenReturn(100.00);
when(stock.getQuantity()).thenReturn(200);
when(stock.getValue()).thenCallRealMethod();
ログイン後にコピー

ここで、getPrice() メソッドと getQuantity() メソッドはモック実装を持ち、getValue() は元の Stock クラスと同じように実行されます。

または、「スパイ」API を使用します:

Stock stock = spy(Stock.class);
when(stock.getPrice()).thenReturn(100.00);
when(stock.getQuantity()).thenReturn(200);
ログイン後にコピー

この場合、他のすべてのメソッド呼び出しgetValue() を使用する場合は、実際の実装を使用してください。

実際のメソッドが呼び出されず、モック ロジックが一貫して適用されるようにするには、次の代替表記を検討してください。

doReturn(100.00).when(stock).getPrice();
doReturn(200).when(stock).getQuantity();
ログイン後にコピー

ただし、これは重要です。この例では、 getValue() メソッドはゲッターではなく、価格と数量に直接依存していることに注意してください。その結果、getPrice() と getQuantity() をモックしても望ましい動作が得られない可能性があります。

別のアプローチは、モックを完全に回避し、代わりに Stock クラスの直接インスタンス化に依存することです。

Stock stock = new Stock(100.00, 200);
double value = stock.getValue();
ログイン後にコピー

実際のインスタンスを作成することで、実際の価格と数量の値に基づいて getValue() が意図したとおりに実行されることを保証できます。

以上がMockito でメソッドを部分的にモックする方法: 他のメソッドを保持しながら特定のメソッドをモックする?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート