我有一些静态方法可以使用 Mockito + PowerMock 进行模拟。一切都是正确的,直到我尝试模拟一个只抛出异常的静态方法(并且什么都不做)。
我的测试类如下所示:
最佳:
@RunWith(PowerMockRunner.class)
@PrepareForTest({Secure.class, User.class, StringUtils.class})
身体:
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();
和 changePassword 方法是:
Long id = Secure.getCurrentUser().id;
boolean is = StringUtils.isNullOrEmpty("whatever");
User user = User.findById(1L);
// ...
前 2 个静态调用工作正常(如果我注释掉第 3 个),但最后一个( User.findById(long id) )在“Mockito.when”方法中调用时抛出异常。此方法如下所示:
public static <T extends JPABase> T findById(Object id) {
throw new UnsupportedOperationException("Please annotate your JPA model with @javax.persistence.Entity annotation.");
}
我的问题是如何模拟这种方法以获得我期望的结果?谢谢你的帮助。
编辑:
感谢所有回复。我找到了解决方案。我试图模拟一个方法 findById,它不是直接在 User.class 中,而是在 User 扩展的 GenericModel.class 中。现在一切正常。