[英]How can I call the actual constructor of a mocked mockito object?
我有類似的代碼
class superClass {
public String transform(String str) {
//lots of logic including ajax calls
return("Modified"+str);
}
}
class baseClass extends superClass {
private FetchData fetchData;
baseClass(FetchData fetchData) {
this.fetchData = fetchData;
}
public String parse() {
String str = fetchData.get();
//some more logic to modify str
return transform(str);
}
}
我正在使用Mockito和Junit進行測試。 我在嘲笑baseClass
並做這樣的事情
baseClass baseMock = Mockito.mock(baseClass.class);
Mockito.when(baseMock.parse()).thenCallRealMethod();
Mockito.when(baseMock.transform()).thenReturn("Something");
我如何注入模擬fetchData
,因為它是通過構造函數注入的?
您可以使用Mockito.spy
( http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html#spy ):
baseClass object = new baseClass(new FetchData());
baseClass spy = Mockito.spy(object);
Mockito.when(spy.parse()).thenCallRealMethod();
Mockito.when(spy.transform()).thenReturn("Something");
您的問題具有不同的性質:您創建了難以測試的代碼。 構造函數就是這樣:構造函數必須非常小心。
另一件事是您直接“碰上”了“優先選擇繼承而不是繼承”。 簡單地擴展其他類以繼承一些有用的行為可能很誘人-但是當您這樣做時,您恰恰遇到了這類問題!
我的一個非答案:退后一步,仔細看看您的設計是否真的是最好的解決方案。 可能您是先看這些視頻才了解我在說什么。 如果您周圍有經驗豐富的人,請與他們交談; 並請他們審查您的設計。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.