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

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

Linda Hamilton
Linda Hamilton原創
2024-12-09 16:01:16985瀏覽

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

Mockito - 探索用於模擬的doReturn() 和when() 之間的區別

在Spring MVC 應用程式中利用Mockito的功能時,開發人員經常會遇到doReturn(...).when(...) 和doReturn(...).when(...) 之間的相似之處當(...).then回傳(...)。這就引發了一個問題:既然這兩種方法表面上是等價的,為什麼它們會存在。

雖然這兩種方法在使用 @Mock 註解的模擬時產生相同的結果,但在使用 @Spy 註解的間諜物件時會出現微妙的差異。與 when(...).thenReturn(...) 在傳回指定值之前執行實際的方法呼叫不同,doReturn(...) 完全繞過方法呼叫。

這種差異在以下情況下變得至關重要:處理具有拋出異常方法的監視對象。例如,考慮以下帶有兩個方法的類別:

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

    protected String anotherMethodInClass() {
        throw new NullPointerException();
    }
}

在測試類別中:

@Spy
private MyClass myClass;

// ...

// Executes methodToBeTested() and swallows the NullPointerException
doReturn("test").when(myClass).anotherMethodInClass();

// Throws NullPointerException without executing methodToBeTested()
when(myClass.anotherMethodInClass()).thenReturn("test");

如示範的, doReturn(...) 可讓您控制返回值不觸發方法執行,而when(...)首先執行該方法,然後才提供指定的結果。這種微妙的差異可以更好地控制物件模擬和異常管理,使 doReturn(...) 成為處理可能引發異常的間諜物件時的首選。

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

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