Подтвердить что ты не робот

Как вызывать метод немоктивного объекта?

Кажется, mockito только проверяет, вызван ли метод макетного объекта, а у mock-объекта всегда есть sth. подобный doReturn(). когда (макет объект)...

Но могу ли я создать макет объекта и определить doReturn(). когда (mock object).. а затем проверить метод другого объекта?

Вот что я хочу сделать: я определяю 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(...);
}
4b9b3361

Ответ 1

Для этого вы можете использовать Spy Mockito. Если вы настроили anotherObj в качестве шпиона, вы можете проверить вызовы методов для этого объекта. В вашем примере вам нужно убедиться, что при вызове foo используется шпион вместо обычной реализации anotherObj. Шпион настроен примерно так:

AnotherClass anotherObjSpy = Mockito.spy(new AnotherClass());
// do stuff -- e.g. anotherObjSpy.foo(...);
verify(anotherObjSpy).codePath1(...);