背景:
在日常写测试用例的过程中,我们会经常遇到同一个类中方法A调用方法B的情况,此时我们需要mock掉方法B,然后当调用方法A时,A中调用B时就使用我们mock B的结果,那么这样一个简答的场景怎么通过powermock实现呢?
解决方案:
我们可以使用spy来做到这一点,可以看下我们的例子,首先是被测试的类,里面会有A方法调用B方法的逻辑,如下所示:
/**
* 被测试的类.里面有类方法之间的调用
* */
public class CallInSameMethodClass {
public String show(Integer count) {
return funcInner(count);
}
private String funcInner(Integer count) {
return "func_" + count.toString();
}
}
以下是我们使用spy来解决这个方法间mock调用的代码
@RunWith(PowerMockRunner.class)
@PowerMockIgnore({"javax.management.*", "javax.net.ssl.*"})
@PrepareForTest({CallInSameMethodClass.class})
public class PowerMockSameMethodTest {
/**
* 使用spy来mock方法之间的调用
*/
@Test
public void testMethodCall() throws Exception {
CallInSameMethodClass inst = PowerMockito.spy(new CallInSameMethodClass());
PowerMockito.doReturn("mockPrivateResult").when(inst, "funcInner", Mockito.any());
String ret = inst.show(10);
Assert.assertTrue(ret.equals("mockPrivateResult"));
}
}
通过使用spy而不是mock的方式,我们就可以轻松完成当A方法调用B方法时,mock掉B方法的任务