簡體   English   中英

如何為被測類的實例模擬實例方法的輸出?

[英]How to mock the output of an instance method for an instance of the class under test?

我正在測試一個類的實例方法,但它也依賴於對另一個實例方法的調用。 如何模擬第二個實例方法的響應?

不是實際的代碼,而是等效的:

public class A{
    public String[][][] m1(String[][][] arg1){
        ArrayList<String[]> arg2 = new ArrayList<>();
        String[][][] response = m2(arg1, arg2);

        if (response == null)
            return arg1;
        else
            return response;
    }

    public String[][][] m2(String[][][] arg1, ArrayList<String[]> arg2){
        return new String[][][]{{{}}};
    }
}

所以這里我將測試方法的m1返回值,但想模擬方法m2的返回

如@GhostCat所述,使用Mockito Spies將是一個很好的解決方案。

理想情況下,您不必模擬實例方法即可測試類中的另一個實例方法。 如果您必須模擬該實例方法,則它可能與另一個實例方法不屬於同一類(請參閱此其他SO post )。 如果是這種情況,您可以將該實例方法放入其自己的類中,然后依賴於該類的實例(提供給構造函數)–然后,您可以在使用以下實例創建類時使用該實例方法來模擬該類測試。

或者,也許與其隔離m1並針對m1運行單元測試,不如僅對測試整個類的行為的類運行測試,而不僅僅是對單個實例方法的行為進行測試。

另外,如果兩個實例方法確實屬於同一個類,那么對單元進行單獨的測試是絕對至關重要的,並且您不使用模擬框架。 可以創建A類的子類,該子類覆蓋m2並返回模擬結果,該結果類似於m2通常返回的結果。 然后,您可以測試此子類並成功對m1進行單元測試。

編輯 :如果m2或多或少是一個不需要真正進行單獨測試的輔助方法,我將其設為私有方法,然后根本不進行測試,除非通過類的公共方法進行間接測試。

暫無
暫無

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

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