[英]How to perform Unit Test using Java Mockito
我正在嘗試使用mockito
測試此代碼,因此需要將result
模擬為錯誤並測試代碼。 在這種情況下,我將result
硬編碼為1。
public class RetrieveData {
public int retrieveMetaData() {
int retries = 0;
int result = 0;
int MAX_RETRIES = 3;
while (retries++ < MAX_RETRIES) {
try {
result = 1;
} catch (Exception e) {
if(retries < MAX_RETRIES) {
System.out.println(" retries :" + retries );
} else {
throw e;
}
}
}
return result;
}
public static void main(String[] args) {
int result ;
RetrieveData obj = new RetrieveData();
result = obj.retrieveMetaData();
System.out.println(result);
}
}
的Mockito:
import org.junit.Test;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
public class TestretrieveMetaData {
@Test
public void test_retrieveMetaData() throws Exception {
RetrieveData resultObj = mock(RetrieveData.class);
// how to add the mock for the result.
}
}
首先,您必須了解您打算做什么!
您會看到,您要么模擬了類X ...,因為在某個類Y中使用了X的實例,並且您打算測試Y。 或者您打算測試 X類,但是您不應該模擬X實例! 您可以測試X,也可以使用X來測試其他東西。
假設您要模擬RetrieveData
類的實例,只需執行以下操作:
RetrieveData resultObj = Mockito.mock(RetrieveData.class);
Mockito.when(resultObj.retrieveMetaData()).thenReturn(42);
因此,要與Tobb的評論保持一致:您不能單獨“模擬”該結果字段。 如果有的話,您可以模擬類的完整實例。 但是如前所述:只有在要測試的另一個類中使用該實例時,這才有意義。
長話短說:如上所述,真正的問題是您正在嘗試使用根本無法理解的概念(此處沒有判斷力)。 我的建議:首先閱讀有關Mockito的優秀教程。 然后花了很多時間思考“如何編寫可以以合理方式測試的代碼”。 您正在嘗試從步驟10開始,但這將不起作用,因為您只能在之前執行步驟1至9並了解它們的含義后才能這樣做。
是的,當您要“部分嘲笑”時, 可以使用Mockito 間諜 。 使用它,您可以測試X的各個部分,同時也可以“模擬” X的其他部分。但這確實是一項高級功能,很可能不是您應該首先學習的主題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.