如何调用模拟mockito对象的实际构造函数?

Viv*_*osh 5 java junit unit-testing mockito powermock

我有类似的代码

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用mockito和junit来测试它.我在嘲笑baseClass和做这样的事情

baseClass baseMock = Mockito.mock(baseClass.class);
Mockito.when(baseMock.parse()).thenCallRealMethod();
Mockito.when(baseMock.transform()).thenReturn("Something");
Run Code Online (Sandbox Code Playgroud)

我如何注入模拟fetchData,因为它是通过构造函数注入的?

Str*_*lok 8

您可以使用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");
Run Code Online (Sandbox Code Playgroud)