使用類比框架Mockito 增強測試能力時,開發人員經常會遇到doReturn( )和when() 方法。雖然這兩種方法都用於存根方法調用,但在處理間諜物件(用 @Spy 註釋)時,它們之間存在細微的區別。
when(...).thenReturn (...):
doReturn(...).when(...):
考慮以下內容MyClass:
public class MyClass { protected String methodToBeTested() { return anotherMethodInClass(); } protected String anotherMethodInClass() { throw new NullPointerException(); } }
doRet urn(...).when(...):
@Spy private MyClass myClass; // Works as expected doReturn("test").when(myClass).anotherMethodInClass();
when(...).thenReturn(.. .):
// Throws a NullPointerException when(myClass.anotherMethodInClass()).thenReturn("test");
在這種情況下,doReturn() 確保異常避免了 anotherMethodInClass(),同時仍傳回所需的值。相較之下,when() 會觸發實際的方法調用,導致拋出 NullPointerException。
因此,在處理間諜物件時,選擇 doReturn() 和 when() 取決於您是否要呼叫實際方法或完全繞過它。
以上是Mockito:「doReturn()」與「when()」:什麼時候應該對間諜物件使用which?的詳細內容。更多資訊請關注PHP中文網其他相關文章!