簡體   English   中英

模擬驗證

[英]mockito mock verify

//Let's import Mockito statically so that the code looks clearer
import static org.mockito.Mockito.*;

//mock creation
List mockedList = mock(List.class);

//using mock object
mockedList.add("one");
mockedList.clear();

//verification
verify(mockedList).add("one");
verify(mockedList).clear();

我不明白這種結構的意義是什么? 它有什么幫助? 它與僅調用函數有何不同?
該文檔很薄。
謝謝

當您mockedList.add("one"); 它會在記住您的操作的同時對mocked object執行操作。 因此,當您verify(mockedList).add("one"); ,它驗證add被稱為上mockedList與爭論one

希望你能有所作為。

您希望測試類A的某些方法Foo在類B的對象上調用了方法Bar 。換句話說,您正在測試類A。在測試過程中,您對類B進行了模擬。然后傳遞此模擬以某種方式反對A類(取決於A類的實際工作方式)。 當您的測試運行Foo類A的方法,你期望的Bar法得到您的B級的模擬稱為通過調用verifyBar法,試驗后Foo的方法,你可以檢查Foo方法實際上工作正常-稱為Bar

Mockito的verify方法是驗證方法的調用時間,如果調用時間為1,則可以省略此參數,請參見Mockito Line 1473的源代碼

public static <T> T verify(T mock) {
    return MOCKITO_CORE.verify(mock, times(1));
}

所以你編碼

verify(mockedList).add("one");
//is the same as
verify(mockedList,times(1)).add("one");

確實是要驗證add方法的執行一次

確實在您的示例中這很明顯,但是驗證方法調用的主要思想出現在實際的代碼測試期間-想象一些代碼執行方法調用,例如:

class A{
 ....
 service.doSomething(<some arguments>)
 ....
}

為了測試它,您將傳遞模擬服務對象,但有時您想驗證為該調用傳遞的特定參數值(或調用次數),因此您將像示例中那樣使用verify。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM