单测UnfinishedStubbingException

2020-11-18  本文已影响0人  普通的程序员

用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操作,就会出现这个异常。

想解决这个异常,就要打断这个引用链。

上一篇 下一篇

猜你喜欢

热点阅读