用demo解释
interface Car{
public String getCarName();//get车名
}
interface CarPrinter{
public String print(Car car);//内部想打印车名,我只是没写
}
public class CarTest{
@Mock
Car car;
@Mock
CarPrinter carPrinter;
@Test
public void demo(){
Mockito.when(car.getCarName()).thenReturn("五菱宏光");
//注意,这里我也是mock了一个方法,使其返回五菱宏光
//works
String carname = car.getName();
Mockito.when(carPrinter.print(car)).thenReturn(carname);
//crash
//Mockito.when(carPrinter.print(car)).thenReturn(car.getCarName());
}
}
这个问题的意见
https://medium.com/@adamspeakman/mockito-unfinishedstubbingexception-in-tests-3d622532d491
"So why do we get an UnfinishedStubbingException? Because we’re accessing a mock before we finish the stubbing"
看完整个分析,我的理解是
mockito 还持有着一个 ongoingStubbing,简化来说就是
Mockito.when(carNamePrinter.printCarName(car)) 就是这个ongoingStubbing
这是mockito这个时候正在执行的mocProgress,
如果这个过程没有结束,我们就去进行另一个 car.getName()的mock操作,就会出现这个异常。
想解决这个异常,就要打断这个引用链。
网友评论