使用PowerMockito mock静态方法

1.pom文件加入依赖

<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-module-junit4</artifactId>
    <version>2.0.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-api-mockito2</artifactId>
    <version>2.0.0</version>
    <scope>test</scope>
</dependency>

注意:powermockito2.*版本对应mockito2.*之后的(依赖注意powermock-api-mockito2)

@RunWith(PowerMockRunner.class)
@PrepareForTest(StaticUtil.class)
public class JacocoServiceTest {
    @InjectMocks
    JacocoService service;

    @Before
    public void setUp(){
        PowerMockito.mockStatic(StaticUtil.class);
        MockitoAnnotations.initMocks(this);
        //解决无法获取实体类表名问题
        Config config = new Config();
        EntityHelper.initEntityNameMap(Entity.class,config);
    }
    @Test
    public void selectDte() {
        PowerMockito.when(StaticUtil.staticMethod("调用静态方法")).thenReturn("期望值");
        //调用被测试方法,当被测试方法调用StaticUtil的静态方法staticMethod时,静态方法staticMethod返回值为 “期望值”
        String s = service.selectDte();
        Assert.assertEquals("被测试方法期望值",s);
    }
}

注意:

PowerMockito.mockStatic(StaticUtil.class);
MockitoAnnotations.initMocks(this);

前后顺序不可颠倒(参考的其他大佬意见,未实测)

当被测试类需要使用多个类的静态方法时,

@PrepareForTest({StaticUtil.class,StaticUtil2.class})

当被测试类包含私有静态方法时,上面方式不可用,需要更换when()方法中的参数

@RunWith(PowerMockRunner.class)
@PrepareForTest(StaticUtil.class)
public class JacocoServiceTest {
    @InjectMocks
    JacocoService service;

    @Before
    public void setUp(){
        PowerMockito.mockStatic(StaticUtil.class);
        MockitoAnnotations.initMocks(this);
        //解决无法获取实体类表名问题
        Config config = new Config();
        EntityHelper.initEntityNameMap(Entity.class,config);
    }
    @Test
    public void selectDte() {
    //私有静态方法staticPrivateMethod(String str),有参数时mock方式,when(包含私有静态方法的类对象,方法名,方法参数),
    //方法参数可以不用Mockito.anyString(),自己写一个字符串;多个参数时不可以同时有mock的参数和自己写的参数,全部mock参数或全部自己写
        PowerMockito.when(StaticUtil.class,"staticPrivateMethod",Mockito.anyString()).thenReturn("期望值");
//doReturn.when  和 when.thenReturn 结果相同,详细区别可自行查阅资料
//PowerMockito.doReturn("期望值").when(StaticUtil.class,"staticPrivateMethod",Mockito.anyString());
        //调用被测试方法,当被测试方法调用StaticUtil的私有静态方法staticPrivateMethod时,静态方法staticPrivateMethod返回值为 “期望值”
        String s = service.selectDte();
        Assert.assertEquals("被测试方法期望值",s);
    }
}

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值