java - tiempo - ¿Cómo verificar que se llame a un método de un objeto no simulado?
manual de programacion android pdf (1)
Puedes usar un Mockito
Spy
para esto.
Si configura a
anotherObj
como espía, puede verificar las llamadas a métodos en ese objeto.
En su ejemplo, debe asegurarse de que la llamada a
foo
use el espía en lugar de una implementación ordinaria de
anotherObj
.
El espía está configurando algo como esto:
AnotherClass anotherObjSpy = Mockito.spy(new AnotherClass());
// do stuff
verify(anotherObjSpy).codePath1(...);
Parece que mockito solo verifica si se llama a un método de un objeto simulado y si el objeto simulado siempre tiene algo. como doReturn (). when (objeto simulado) ...
Pero, ¿puedo crear un objeto simulado y definir doReturn (). When (objeto simulado) ... y luego verificar que se llame a un método de otro objeto?
Esto es lo que quiero hacer: defino un entorno simulado y devuelvo una respuesta pase lo que pase. Pero luego quiero verificar diferentes métodos de otroObj se llama en diferentes casos.
¿Como hacer eso?
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(...);
}