2014-03-30 85 views
0

我目前正在通過他的書「面向對象的設計 - 面向測試的指導」開展工作。作者是書中使用的JMock的創造者。由於Mockito目前擁有最具表現力(可讀)的API,因此我使用的是Mockito而不是JMock。Mockito - 根據另一個對象狀態驗證方法調用

對於大多數例子來說,目前爲止工作得很好,代碼少得多。雖然看到API在時間和框架(JMock - > EasyMock - > Mockito)中的演變並且仍然基於相同的概念,這很有趣。

無論如何:我需要驗證在另一個對象狀態具有特定值時調用模擬方法。

public class TestSomething{ 

    private MyMockedInterface mock; 
    private States state; 

    @Test 
    public void testMethod() 
    { 
     // I need something like 
     when(state.equals(value)).verify(mock).method() 

     sut.doSomething(); 
    } 
} 

不幸的是,當(T methodCall)無法處理對象比較。在sut.something()之後的assertEquals不會幫助我,因爲狀態可能會在doSomething中改變多次。

我很確定必須有辦法解決這個問題。如果舊的JMock有一個功能Mockito不會:奇怪的將是奇怪的...我只是無法找到它。

回答

1

你需要的是一個叫做Answer的東西 - 這是一個包裝了一小段代碼的對象,它會在你的方法被調用時運行。使用Answer的語法描述如下:http://docs.mockito.googlecode.com/hg/latest/org/mockito/Mockito.html#11

在您的Answer中,您可以使用斷言來檢查其他對象的狀態是否是您所需要的狀態。然後在最後,您可以執行verify,只是爲了確保調用該方法。

相關問題