use*_*955 71 java unit-testing mockito
似乎mockito只验证是否调用了模拟对象的方法,并且模拟对象总是具有某种功能.像doReturn().when(模拟对象)...
但我可以创建一个模拟对象并定义doReturn().when(模拟对象)..然后验证另一个对象的方法被调用?
这就是我想要做的:我定义一个mockEnvironment并返回一个响应,无论发生什么.但后来我想验证在不同情况下调用anotherObj的不同方法.
怎么做?
public class BaseClass {
private Environment mockEnvironment;
@Test
public void testcase () {
setMockitoEnvironment();
response = foo(mockEnvironment, argument1);
verify(anotherObj).codePath1(...);
response = foo(mockEnvironment, argument2);
verify(anotherObj).codePath2(...);
}
}
//this method successfully return a response with any input
//because I do not care how response is eventually generated,
//I only care whether code path reaches createResponse() via
//code path 1 or code path 2.
private void setMockitoEnvironment() {
mockEnvironment = mock(Environment.class);
doReturn (response).when(mockEnvironment).createResponse(for any input);
}
private Response foo(...) {
...
return createResponse(...);
}
Run Code Online (Sandbox Code Playgroud)
K E*_*son 97
你可以使用Mockito Spy.如果您设置anotherObj为间谍,则可以验证该对象上的方法调用.在您的示例中,您需要确保调用foo使用间谍而不是普通的实现anotherObj.间谍设置如下:
AnotherClass anotherObjSpy = Mockito.spy(new AnotherClass());
// do stuff -- e.g. anotherObjSpy.foo(...);
verify(anotherObjSpy).codePath1(...);
Run Code Online (Sandbox Code Playgroud)