待测班级:
public class A {
public static String m1(String p1, String p2);
public static String m2(String p1, String p2, Object p3) {
//...other work involving p3
String res;
if(conditionA)
{
res = m1(p1,p2);
} else {
res = //something else;
}
//continue work
}
}
详细说明: 方法m1进行数据库调用,使用"固有" (未注入)对Hibernate和Configs的依赖。 方法m1和m2的现有消费者,因此不能选择更改签名。 m1 / m2没有写过测试。
conditionA是一个远程"受控制的"发射门(我能够嘲笑)。
if条件是我最近添加的,需要在conditionA的两个值下验证方法m2的行为。
我正在寻找的是一种提供m1模拟实现的方法,同时仍然调用实际方法m2。
无论我试图模仿m1,我总是以PowerMockito的未完成的存根异常结束。
答案 0 :(得分:0)
你应该做部分嘲笑。使用mockito,您可以:
A a = Mockito.spy(A.class);
然后你可以存储你想要模拟的方法:
Mockito.doReturn("result").when(a).m1(...);
另一种方法仍然是真正的方法。
PowerMockito.mockStatic(A.class);
when(A.m1(...)).thenReturn("result");
再一次,另一种方法仍将是真正的方法。