有没有办法让mockito的mock或spy对象在方法竞争之前返回它的值?例如,如果我有这样的课程
public class Calculator{
public List calculate(List l){
l.add(1);
l.add(2);
method1(l);
method2(l);
method3(l);
return l;
}
public void method1(List l){
//calculate something here
}
public void method2(List l){
//calculate something here
}
public void method3(List l){
//calculate something here
}
}
然后我像这样使用间谍
Calculator calculator = new Calculator();
Calculator spy = spy(calculator);
when(spy.calculate(aList)).thenCallRealMethod();
在调用method2之后,我可以让方法结束它的进程吗?我知道我可以使用doNothing().when(spy).method3(anyList())
来避免调用method3,但有没有办法让方法计算在调用方法2后停止其进程?
答案 0 :(得分:1)
直接回答这个问题:不,你不能使用Mockito来完全避免方法调用,或者深刻改变被测系统的行为。
在内部,Mockito创建了一个有问题的类的动态子类*。这正确地暗示,除非您覆盖Calculator.calculate
(否定测试calculate
的真实实现的目的),否则您将无法使用Mockito来避免调用method3
。
您最好的选择:
doNothing().when(spiedCalculator).method3()
。method2
中抛出一个例外,以避免调用method3
,但这会阻止流量在method3
之后到达函数的一部分。*实现实际上是使用CGLib或ByteBuddy生成的生成字节码代理类。