2016-10-12 1 views
1

私は以下に示すようなかなり単純なコードを持っています。Mockito - Spyのバグ - 呼び出しとして記録するとき

@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);  
} 

上記のコードでは、最初の失敗「検証」ので、「スタート」&への最初の呼び出しとして「とき」のコールを記録しているようです。このコードは、「リセット」の呼び出しをコメント解除するときにのみ機能します。私はJava 1.8でWindows上でMockito 2.1.0を使用しています。

答えて

2

実際には、when(spyVehicle.start(true)).thenReturn("Sure");という行にstartと呼んでいます。 これを避けるにはいくつかの方法があります。それらの

一つdoReturnを使用している:ここではスタブやってメソッドを呼び出していないされていることを

doReturn("Sure").when(spyVehicle).start(eq(true)); 

お知らせ。

+1

ここで 'eq'は冗長であることに注意してください。あなたは 'doReturn(" Sure ")と書かなければなりません。(spyVehicle).start(true);' –

関連する問題