我有一些非常简单的代码,如下所示。
@Test
public void bugInInvokingASpyAndVerification() throws ColdDayException {
//given
Engine en = new Engine();
Engine spyEngine = spy(en);
Vehicle realDeal = new Vehicle(new Wheel(), spyEngine, new Brake());
Vehicle spyVehicle = spy(realDeal);
//When part - set-up stubs
when(spyVehicle.start(true)).thenReturn("Sure");
//Mockito.reset(spyVehicle);
//then part - actual calls + verifications
String x = spyVehicle.start(true);
assertEquals(x, "Sure");
verify(spyVehicle, times(1)).start(true);
verify(spyEngine, atLeastOnce()).startEngine(true);
verify(spyEngine, times(1)).startEngine(true);
}
以上代码似乎将“何时”通话记录为“开始”&因此第一次'验证'失败了。该代码仅在我取消注释“重置”时才有效。我在Windows上使用Mockito 2.1.0,使用Java 1.8。
答案 0 :(得分:2)
确实,在when(spyVehicle.start(true)).thenReturn("Sure");
行中,您致电start
。
有几种方法可以避免这种情况。
其中一个是使用doReturn
:
doReturn("Sure").when(spyVehicle).start(eq(true));
注意,这里我们正在进行存根而不是调用方法。