[英]Make mockito force method to return its value before process finish
在方法竞争之前,是否有一种方法可以使模拟对象中的模拟对象或间谍对象返回其值? 例如,如果我有这样的课程
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之后停止其进程?
要直接回答这个问题:不,您不能使用Mockito完全避免方法调用,否则将深刻改变被测系统的行为。
在内部,Mockito创建所涉及类的动态子类*。 这正确地暗示着,除非您重写Calculator.calculate
(违反测试calculate
实际实现的目的),否则您将无法使用Mockito来避免调用method3
。
您的最佳选择:
doNothing().when(spiedCalculator).method3()
。 method2
中引发一个异常,该异常避免了对method3
的调用,尽管这可以防止流到达method3
之后的函数部分。 *实现实际上是使用CGLib或ByteBuddy生成的生成字节码代理类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.