首頁 > Java > java教程 > 如何在 Mockito 中部分模擬方法:在保留其他方法的同時模擬特定方法?

如何在 Mockito 中部分模擬方法:在保留其他方法的同時模擬特定方法?

Barbara Streisand
發布: 2024-12-05 13:26:11
原創
765 人瀏覽過

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

部分模擬:在Mockito 中模擬特定方法

測試類別時,可能需要僅模擬某些方法,同時保留行為其他人的。在 Mockito 中,這是透過「部分模擬」實現的,其中模擬了一系列方法,而未模擬的方法則按預期執行。

考慮以下Stock 類,其中包含getPrice()、getQuantity() 和getValue( ) 方法:

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 中一樣

或者,使用「spy」 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( ) 方法直接依賴價格和數量,而不是它們的getter。因此,模擬 getPrice() 和 getQuantity() 可能仍然無法產生所需的行為。

另一種方法是完全避免模擬,而是依賴Stock 類別的直接實例化:

Stock stock = new Stock(100.00, 200);
double value = stock.getValue();
登入後複製

透過建立真實實例,我們可以確保getValue() 根據實際價格和數量值按預期執行。

以上是如何在 Mockito 中部分模擬方法:在保留其他方法的同時模擬特定方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板