簡體   English   中英

如何使用Java Mockito執行單元測試

[英]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.

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