首頁 > Java > java教程 > 如何使用 Mockito 選擇性地模擬 Java 中的方法?

如何使用 Mockito 選擇性地模擬 Java 中的方法?

Linda Hamilton
發布: 2024-12-07 18:34:13
原創
671 人瀏覽過

How to Selectively Mock Methods in Java with Mockito?

使用 Mockito 模擬 Java 中的選擇性方法

在 Java 中,Mockito 允許開發人員模擬類別中的特定方法,同時保持其他方法不受影響。這個過程稱為部分模擬。

考慮以下 Stock 類別:

public class Stock {

    private final double price;
    private final int quantity;

    public Stock(double price, int quantity) {
        this.price = price;
        this.quantity = quantity;
    }

    public double getPrice() {
        return price;
    }

    public int getQuantity() {
        return quantity;
    }

    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();
登入後複製

在此配置:

  • when(stock.getPrice()).thenReturn (100.00);:模擬getPrice()方法回傳100.00.
  • when(stock.getQuantity()).thenReturn(200);:模擬 getQuantity() 方法回傳 200。
  • when( stock.getValue()).thenCallRealMethod();:指定getValue() 方法應該按照原始程式碼中指定的方式執行。

或者,我們可以用spy() 方法來代替mock() :

Stock stock = spy(Stock.class);
doReturn(100.00).when(stock).getPrice();
doReturn(200).when(stock).getQuantity();
登入後複製

在這種情況下,所有未存根的方法(例如getValue())將呼叫其原始方法

值得注意的是,如果getValue() 直接依賴getPrice() 和getQuantity() 等模擬方法的值,而不是模擬傳回值,則它們可能不會產生所需的結果。在這種情況下,完全避免模擬並依賴測試中的實際實現可能更合適,如下所示:

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

以上是如何使用 Mockito 選擇性地模擬 Java 中的方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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