使用 Mockito 進行選擇性方法模擬
Mockito 在模擬類中的特定方法方面提供了靈活性。透過利用部分模擬,開發人員可以選擇要重寫哪些方法,同時保持其他方法不變。
例如,考慮一個Stock 類,其方法為getPrice()、getQuantity() 和getValue()getQuantity() 和getValue()
。您可能想要模擬前兩個方法的回傳值,但讓getValue() 保留其原始行為。 在 Mockito 中使用部分模擬,您可以實現這種精確度。 Stock 物件被實例化為模擬,同時為 getPrice()
和Stock stock = mock(Stock.class); when(stock.getPrice()).thenReturn(100.00); when(stock.getQuantity()).thenReturn(200);getQuantity()
設定特定的期望。下面是一個示例:
通過為when(stock.getValue()).thenCallRealMethod();getValue()
調用thenCallRealMethod(),您可以保留其實際實現:
Stock stock = spy(Stock.class); when(stock.getPrice()).thenReturn(100.00); when(stock.getQuantity()).thenReturn(200);
或者,間諜可以是使用,其中所有方法最初都引用實際實現。只有那些明確存根的方法才會採取改變的行為。這是間諜方法:
請注意,使用間諜時,避免在存根方法中呼叫真實方法至關重要。Stock MOCK_STOCK = Mockito.mock( Stock.class, CALLS_REAL_METHODS );
還有另一個選項涉及Mockito.CALLS_REAL_METHODS 標誌:
這種方法將未存根的方法委託給它們的實際方法但是,在給在定的Stock 範例中,由於getValue() 對price
和的依賴性,此部分模擬策略仍可能失敗直接數量
,而不僅僅是在它們的吸氣劑上。Stock stock = new Stock(100.00, 200); double value = stock.getValue(); assertEquals("Stock value not correct", 100.00*200, value, .00001);此外,在以下情況下考慮完全避免模擬:可能:
以上是如何在 Mockito 中選擇性 Mock 方法進行部分 Mock?的詳細內容。更多資訊請關注PHP中文網其他相關文章!