理解Mockito的doReturn()和when()的區別
開發Spring MVC應用時,使用Mockito來模擬服務層物件是一種常見的做法。在探索 Mockito 的功能時,很明顯 doReturn(...).when(...) 和when(...).thenReturn(...) 似乎執行相同的功能。這就引出了一個問題:這兩種方法有什麼不同嗎?
當使用間諜物件(用@Spy註解)而不是模擬(用@註解)時,doReturn()和when()之間的關鍵區別變得明顯Mock).
doReturn() 與帶有Spied的when()物件
範例
考慮以下程式碼:
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中文網其他相關文章!