2017-09-04 229 views
1

我有數倍BarService相關重載update方法就可以了,就像這樣:如何使用Mockito來驗證是否有一組重載方法被調用?

BarService#update(Bar bar); 
BarService#update(Bar bar, boolean checkX); 
BarService#update(Bar bar, boolean checkX, boolean checkY); 

我想,以確保他們的沒有被稱爲在一個特定的測試。目前,我這樣做:

@Test 
public test doFoo_shouldNotUpdateBar() { 
    setUpTest(); 
    doFoo(); 
    verify(barService, never()).update(any(Bar.class))); 
    verify(barService, never()).update(any(Bar.class), anyBoolean())); 
    verify(barService, never()).update(any(Bar.class), anyBoolean(), anyBoolean())); 
    ... 
} 

我可以通過所有verify呼叫移動到一個輔助方法來檢查所有重載版本打掃一下了一下:

@Test 
public test doFoo_shouldNotUpdateBar() { 
    setUpTest(); 
    doFoo(); 
    verifyBarServiceNeverUpdates(any(Bar.class)); 
} 

但有一個如何讓Mockito在這裏做我想做的事?基本上,要檢查重載的方法是否被調用,而不考慮其參數?

回答

1

你絕對做不手動掛上「檢驗規範」是名單未使用(如此規模這裏暗示)方法。當你明天添加一個新方法會發生什麼?然後,你將不得不轉向所有的測試,並在那裏添加新的方法。那是不是一種可持續的模式!

相反:

  • 驗證這些調用你打算髮生
  • ,然後調用verifyNoMorInteractions()你的模擬對象上,以確保良好,沒有其他的方法被稱爲
+0

這是一個可行的選擇,但不幸的是,它污染了我的測試與一堆我不想要的東西。讓我們說'barService'在調用'update'之前做'X'和'Y'。現在我必須在調用'verifyNoMoreInteractions(barService)'之前明確'驗證(barService).doX'和'驗證(barService).doY'。但在這個測試中,我實際上並不知道或關心'doX'和'doY',所以他們只是分心。 – Sasgorilla

1

如果酒吧是一個模擬和你想絕對沒有互動,你可以使用Mockito的verifyZeroInteractions方法如下;

Mockito.verifyZeroInteractions(bar); 
+0

這將工作,但不幸的是,我不能指望有零交互;我只是想確保沒有調用'update'方法。 – Sasgorilla

相關問題