java - method - PowerMockito simula método estático que arroja una excepción
powermock and mockito compatible versions (1)
Tengo algunos métodos estáticos para simular el uso de Mockito + PowerMock. Todo fue correcto hasta que intenté burlarme de un método estático que lanza solo una excepción (y no hago nada más).
Mi clase de prueba se ve así:
parte superior:
@RunWith(PowerMockRunner.class)
@PrepareForTest({Secure.class, User.class, StringUtils.class})
cuerpo:
PowerMockito.mockStatic(Secure.class);
Mockito.when(Secure.getCurrentUser()).thenReturn(user);
PowerMockito.mockStatic(StringUtils.class);
Mockito.when(StringUtils.isNullOrEmpty("whatever")).thenReturn(true);
PowerMockito.mockStatic(User.class);
Mockito.when(User.findById(1L)).thenReturn(user); // exception !! ;(
boolean actualResult = service.changePassword();
y el método changePassword es:
Long id = Secure.getCurrentUser().id;
boolean is = StringUtils.isNullOrEmpty("whatever");
User user = User.findById(1L);
// ...
Las primeras 2 llamadas estáticas funcionan bien (si hago un comentario 3), pero la última (User.findById (id larga)) arroja una excepción mientras se llama en el método ''Mockito.when''. Este método se ve así:
public static <T extends JPABase> T findById(Object id) {
throw new UnsupportedOperationException("Please annotate your JPA model with @javax.persistence.Entity annotation.");
}
Mi pregunta es ¿cómo puedo burlarme de este método para obtener el resultado que espero? Gracias por cualquier ayuda.
EDITAR:
Gracias por todas las respuestas. Encontré una solución. Estaba intentando simular un método findById que no estaba directamente en User.class, sino en GenericModel.class, que el usuario extiende. Ahora todo funciona a la perfección.
Intenta cambiar esto:
PowerMockito.mockStatic(User.class);
Mockito.when(User.findById(1L)).thenReturn(user);
A esto:
PowerMockito.mockStatic(User.class);
PowerMockito.doReturn(user).when(User.class, "findById", Mockito.eq(1L));
Ver documentación aquí: