mock method example compatible and java testing mocking mockito powermock

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í: