2016-10-05 46 views
0

我有方法和需要對其進行測試:如何爲mockito設置模擬對象方法調用的回調?

void update() { 
    _cleaner.clear(); 
    _updator.upadate(); 
} 

調用的順序是對於這種情況很重要。我想寫測試是這樣的:

void updateTest(){ 

    Integer CLEAR = 0, UPDATE = 1; 
    Stack<Integer> callStack = new Stack<>(); 

    Cleaner cleaner = mock(Cleaner.class); 
    Updator updator = mock(Updator.class); 

    when(cleaner.clear()).callback(() -> callStack.add(CLEAR)); 
    when(updator.update()).callback(() -> callStack.add(UPDATE)); 

    Some testingObj = new Some(cleaner, updator); 
    testingObj.update(); 

    assertEquels(CLEAR, callStack.pop()); 
    assertEquels(UPDATE, callStack.pop()); 
    assertTrue(callStack.isEmpty()); 
} 

_cleaner.clear()和_updator.upadate()返回void。很明顯,

when(cleaner.clear()).callback(() -> callStack.add(ClearCall)); 
when(updator.update()).callback(() -> callStack.add(UpdateCall)); 

是無效的代碼。除了那些成功的路線,我可以寫些什麼?如何通過mockito調用方法的回調函數(void作爲結果的類型)?

回答

1

我建議您使用InOrder驗證程序來確認以您想要的順序調用方法。看到這裏的一些文件:​​

這個例子是基於代碼直接從文檔:

InOrder inOrder = inOrder(cleaner, updator); 

inOrder.verify(cleaner).clear(); 
inOrder.verify(updator).update(); 
相關問題