首頁 > Java > java教程 > Mockito 的 doReturn() 與 when():使用間諜物件時有什麼不同?

Mockito 的 doReturn() 與 when():使用間諜物件時有什麼不同?

Barbara Streisand
發布: 2024-12-16 17:28:10
原創
543 人瀏覽過

Mockito's doReturn() vs. when(): What's the Difference When Using Spied Objects?

理解Mockito的doReturn()和when()的區別

開發Spring MVC應用時,使用Mockito來模擬服務層物件是一種常見的做法。在探索 Mockito 的功能時,很明顯 doReturn(...).when(...) 和when(...).thenReturn(...) 似乎執行相同的功能。這就引出了一個問題:這兩種方法有什麼不同嗎?

當使用間諜物件(用@Spy註解)而不是模擬(用@註解)時,doReturn()和when()之間的關鍵區別變得明顯Mock).

doReturn() 與帶有Spied的when()物件

  • doReturn(...).when(...):允許您修改方法的回傳值,而無需實際呼叫它。
  • when(...).thenReturn(...):在傳回指定的值之前呼叫實際的方法執行

範例

考慮以下程式碼:

public class MyClass {
    protected String methodToBeTested() {
        return anotherMethodInClass();
    }

    protected String anotherMethodInClass() {
        throw new NullPointerException();
    }
}
登入後複製

測試案例:

@Spy
private MyClass myClass;

// Works fine, does not invoke anotherMethodInClass()
doReturn("test").when(myClass).anotherMethodInClass();

// Throws NullPointerException because anotherMethodInClass() is invoked
when(myClass.anotherMethodInClass()).thenReturn("test");
登入後複製

測試案例

總而言之,在使用間諜物件時, doReturn() 允許您跳過方法執行並直接設定回傳值,而when() 在傳回所需值之前呼叫實際方法。在 Mockito 中使用間諜物件時,這種理解至關重要。

以上是Mockito 的 doReturn() 與 when():使用間諜物件時有什麼不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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