InvocationTargetException en Mockito

Akshat Sood:

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.

Lesiak:

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 queryInfollamada, 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());

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=385465&siteId=1
Recomendado
Clasificación