PowerMockito模拟静态方法抛出异常



我有一些静态方法来模拟使用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个),但最后一个(用户。findById(long id))在Mockito中调用时抛出异常。当的方法。这个方法看起来像这样:

 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中。现在一切都很完美。

试着改变这个:

PowerMockito.mockStatic(User.class);
Mockito.when(User.findById(1L)).thenReturn(user);

:

PowerMockito.mockStatic(User.class);
PowerMockito.doReturn(user).when(User.class, "findById", Mockito.eq(1L));

查看文档:

  • PowerMockitoStubber javadoc
  • PowerMockito使用

相关内容

  • 没有找到相关文章

最新更新