![](/img/trans.png)
[英]How to mock an instance method on injected instance of the class under test?
[英]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.