首頁 > Java > java教程 > Mockito:「doReturn()」與「when()」:我什麼時候該使用哪一個?

Mockito:「doReturn()」與「when()」:我什麼時候該使用哪一個?

Barbara Streisand
發布: 2024-11-28 03:44:10
原創
927 人瀏覽過

Mockito: `doReturn()` vs. `when()`: When Should I Use Which?

Mockito:了解doReturn() 和when() 之間的差異

Mockito 的doReturn() 之間遇到混淆是可以理解的... when() 和when()...thenReturn() 方法,因為它們可能看起來在做同樣的事情。雖然兩者都可以模擬方法呼叫並傳回預定義值,但在使用間諜物件(用@Spy註解)而不是模擬(用@Mock註解)時,有一個微妙的差異變得相關。

關鍵區別:方法呼叫行為

關鍵區別在於這些方法在與間諜互動時的行為方式物件:

  • when( )...thenReturn() 在傳回指定值之前進行真正的方法呼叫。這意味著真正的方法拋出的任何異常仍然需要處理。
  • doReturn()...when() 根本不呼叫該方法。相反,它直接傳回預定義值。這會繞過任何實際的方法呼叫。

說明差異的範例:

考慮以下程式碼:

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

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

使用sied進行測試object:

@Spy
private MyClass myClass;

// ...

// This approach will work without throwing an exception
doReturn("test").when(myClass).anotherMethodInClass();

// This approach will throw a NullPointerException
when(myClass.anotherMethodInClass()).thenReturn("test");
登入後複製

對於監視對象,when()...thenReturn() 嘗試調用 anotherMethodInClass() ,這將拋出 NullPointerException。相比之下,doReturn()...when()避免了呼叫該方法,直接返回“test”,抑制了異常。

結論

它們之間的區別當使用監視對象時,兩種方法變得顯而易見。對於監視對象, doReturn()...when() 透過繞過實際方法呼叫並直接傳回預定義值來提供更好的控制。相反,when()...thenReturn() 呼叫真正的方法,這可能會導致異常或其他意外行為。因此,選擇適當的方法取決於所需的行為以及您使用的是模擬物件還是間諜物件。

以上是Mockito:「doReturn()」與「when()」:我什麼時候該使用哪一個?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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