我有一些静态方法来模拟使用Mockito + PowerMock。一切都是正确的,直到我试图嘲讽只抛出异常的静态方法(并且别无其他)。PowerMockito模拟静态方法引发异常
我的测试类是这样的:
顶部:
@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静态调用工作正常(如果我注释掉第三个),但最后一个(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中,而是在用户扩展的GenericModel.class中。现在一切正常。
目前尚不清楚您是否想要模拟某种方法来抛出异常,或者在模拟方法时遇到异常。而且关于JPA的最后一点似乎并不适合任何地方,或者至少让我很困惑。 – 2013-03-20 12:47:28
你已经在嘲笑它。所以它不会调用抛出异常的真实方法 – 2013-03-20 17:33:53