Me estoy poniendo Excepción InvocationTarget en mi caso de prueba. Esta es la clase que estoy tratando de prueba:
public class UpdateHandler implements Handler {
public void process(UE m, UEC u) {
try {
Info info = facade1.queryInfo(string).getInfo();
Index index = facade2.findindex(string2);
if(facade3.isWhitelisted() {
facade2.update(info, index);
}
} catch(UpdateException e) {
//log
}
}
Este es mi archivo de prueba
public class TestFile {
@Mock
protected Facade1 facade1;
@Mock
protected Facade2 facade2;
@Mock
protected Facade3 facade3;
private Info info;
private Index index;
@InjectMocks
private UpdateHandler updatehandler;
@BeforeMethod
public void beforeTest() {
MockitoAnnotations.initMocks(this);
}
@Test
public void Test1() {
info = getInfo();
index = getIndex();
updateHandler.process(UEprepare(), null);
Mockito.when(facade1.queryInfo(Mockito.anyString()).getInfo()).thenReturn(getInfo());
Mockito.when(facade2.findindex(Mockito.anyString()).thenReturn(getIndex());
Mockito.when(facade3.isWhitelisted()).thenReturn(true);
Mockito.verify(facade1, Mockito.times(1).update(info, index);
}
}
getInfo () y getIndex () son dos métodos que he creado en el archivo de prueba sólo para crear un objeto de muestra de la información y el índice. UEprepare es un método para preparar un objeto de muestra de UE. UM puede ser nulo. He comprobado que no es el tema.
El error que estoy recibiendo es Excepción de puntero nulo. Específicamente, el valor de facade1.queryInfo (string) es nulo. Se supone que es un objeto de tipo InfoResult de la que puede extraer un objeto de información. Revisé el método QueryInfo y que no lanza un NPE en cualquier lugar. Sólo se lanza excepción de UpdateException tipo que ya me he manejado en mi código en el intento de captura.
Cuando fui escarbando, he encontrado un InvocationTargetException. No puedo entender específicamente donde dicha excepción está viniendo pero creo que tiene algo que ver con el método QueryInfo.
He inicializado burla para todas las fachadas que estoy usando y creo que he usado InjectMocks correctamente, así que estoy atascado en cómo depurar esto.
Hay 2 errores en su código:
Orden de métodos
Tienes:
- llame al método de bajo prueba
- expectativas de ajuste
Mockito.when
- la verificación de las expectativas
Mockito.verify
mientras que debería ser
- expectativas de ajuste
Mockito.when
- llame al método de bajo prueba
- la verificación de las expectativas
Mockito.verify
expectativas encadenados
Mockito.when(facade1.queryInfo(Mockito.anyString()).getInfo()).thenReturn(getInfo());
Es necesario maqueta adicional para el resultado de la queryInfo
llamada, digamos @Mock QueryInfo queryInfo
. Entonces, es necesario 2 llamadas para configurar esta expectativa:
Mockito.when(facade1.queryInfo(Mockito.anyString()).thenReturn(queryInfo);
Mockito.when(queryInfo.getInfo()).thenReturn(getInfo());