部分モッキング: 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 サイトの他の関連記事を参照してください。