powermock跳过某方法_使用Powermock对私有方法进行mock

在public方法中往往会调用一些private方法,如果private方法很复杂,我们就需要处理很多方法的mock。如果这时只想要测试public方法,并不想关注private方法的逻辑,那么就需要对private方法进行mock。下面我们简单介绍下如何通过Powermock来对私有方法进行mock。

被测试类:

public class MockPrivateClass {

public String mockPrivateFunc() {

return privateFunc();

}

private String privateFunc() {

return "private func";

}

}

此类中包含一个public方法mockPrivateFunc,里面调用了private方法privateFunc。当前我们想要测试该public方法,并且不想进入private方法执行,那么就需要对该私有方法进行模拟。

测试类:

@RunWith(PowerMockRunner.class)

@PrepareForTest({MockPrivateClass.class})

public class MockPrivateClassTest {

private MockPrivateClass mockPrivateClass;

@Test

public void testMockPrivateFunc() throws Exception {

mockPrivateClass = PowerMockito.spy(new MockPrivateClass());

PowerMockito.when(mockPrivateClass, "privateFunc").thenReturn("test");

String realResult = mockPrivateClass.mockPrivateFunc();

Assert.assertEquals("test", realResult);

PowerMockito.verifyPrivate(mockPrivateClass, Mockito.times(1)).invoke("privateFunc");

}

}

1、由于是对本类的私有方法进行模拟,所以需要在PrepareForTest后面加上MockPrivateClass,同时需要使用spy来模拟一个对象。

2、 使用下面方式来模拟私有方法:

PowerMockito.when(mockPrivateClass, "privateFunc").thenReturn("test");

如果私有方法存在参数,则同样的需要在私有方法名后面带上同样个数及类型的参数,其方法原型为:

public static OngoingStubbing when(Object instance, String methodName, Object... arguments) throws Exception;

3、使用verifyPrivate来验证私有方法被调用,其例如下:

PowerMockito.verifyPrivate(mockPrivateClass, Mockito.times(1)).invoke("privateFunc");

verifyPrivate的参数为mock的对象,及验证模式(可选),invoke参数为要验证的私有方法名称及相应参数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值