gpt4 book ai didi

java - PowerMockito 模拟静态方法抛出异常

转载 作者:行者123 更新时间:2023-11-30 09:24:48 33 4
gpt4 key购买 nike

我有一些静态方法可以使用 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 中。现在一切正常。

最佳答案

尝试改变这个:

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));

在此处查看文档:

关于java - PowerMockito 模拟静态方法抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15520499/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com