使用MockitoJUnitRunner时如何用PowerMockito mock静态方法
正确Mock静态方法的实现方案
你遇到的报错核心是PowerMockito的基础配置缺失,按照以下步骤修改即可:
1. 替换测试类运行器
将测试类上标注的@RunWith(MockitoJUnitRunner.class)替换为PowerMockito专用运行器:
@RunWith(PowerMockRunner.class)
2. 添加静态类Mock声明注解
在测试类上新增@PrepareForTest注解,指定要Mock的静态工具类:
@PrepareForTest(PortalBeanLocatorUtil.class)
该注解的作用是通知PowerMock对指定类进行字节码改造,才能支持静态方法的Mock逻辑
3. 保留原有Mock代码
你之前编写的Mock逻辑不需要调整,修改完配置后即可正常运行:
BeanLocator mockBeanLocator = mock(BeanLocator.class); PowerMockito.mockStatic(PortalBeanLocatorUtil.class); PowerMockito.when(PortalBeanLocatorUtil.getBeanLocator()).thenReturn(mockBeanLocator);
兼容Mockito运行器方案
如果项目中不能替换MockitoJUnitRunner,可以使用PowerMockRule实现相同能力,无需修改运行器配置:
在测试类中新增规则声明:
@Rule public PowerMockRule rule = new PowerMockRule();
同时保留@PrepareForTest(PortalBeanLocatorUtil.class)注解即可。
注意:如果修改配置后仍有异常,请检查PowerMock与Mockito的版本匹配关系,避免版本不兼容导致的异常。
内容的提问来源于stack exchange,提问作者krltos
相关产品推荐
相关产品推荐

