首頁 >Java >java教程 >如何在 Mockito 中選擇性 Mock 方法進行部分 Mock?

如何在 Mockito 中選擇性 Mock 方法進行部分 Mock?

Patricia Arquette
Patricia Arquette原創
2024-12-20 20:11:10917瀏覽

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

使用 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn