我正在使用Mockito 1.9.0。我將如何驗證一個方法只被調用一次,並且傳遞給它的某個字段包含某個值?在我的JUnit測試,我有使用Mockito,我該如何驗證某個方法是否被某個參數調用?
@Before
public void setupMainProg() {
// Initialize m_orderSvc, m_opportunitySvc, m_myprojectOrgSvc
...
m_prog = new ProcessOrdersWorker(m_orderSvc, m_opportunitySvc, m_myprojectOrgSvc);
} // setupMainProg
@Test
public void testItAll() throws GeneralSecurityException, IOException {
m_prog.work();
}
的方法「工作」要求「m_orderSvc」的方法(在傳遞給對象一個參數)。 「m_orderSvc」又包含一個成員字段「m_contractsDao」。我想驗證一下「m_contractsDao.save」被調用了一次,並且傳遞給它的參數包含一個特定的值。
這可能有點混亂。讓我知道我如何澄清我的問題,我很樂意這樣做。
僅供參考,你可以離開過',時間(1)',因爲它總是暗示,除非你添加一個量詞指定比只有一個時間以外的東西。而不是'any(String.class)',有一個更方便的'anyString()'。 – 2012-08-03 21:08:18
值得注意的是,傳遞給AFTER'verify'方法的參數是用'equals'與實際測試期間傳遞的參數進行比較的。所以,不管是什麼方法(在mamboking的例子中是'save'方法),想一想每個參數的_type_,以及與'equals'的比較是否是你真正想要的。如果你想要用「equals」之外的東西來測試參數,你需要一個「ArgumentMatcher」(這可能是Kevin Welker的答案中的「ArgumentCaptor」)。 – 2012-08-05 05:45:54
你如何指定一次,而不是兩次或更多? @ KevinWelker的評論說這是隱含的,但不確定它是否意味着一次,或者至少一次。 – aliteralmind 2015-06-19 18:53:19