2014-08-29 88 views
4

我只是通過簡化事情來重構許多代碼部分。 現在我需要重構測試以及再次使它們變綠,這並不困難。Mockito:如何識別測試中未使用的.when()

但是現在我掙扎了一下,因爲我看到我不再需要一些.when()聲明,因爲這些Mocks不會再被調用。問題是他們不會讓我的測試變成紅色,所以我只能通過仔細檢查每個測試並將其與代碼進行比較來識別它們,這是令人討厭的,並導致讓它變成這樣。

是否有任何可能使未使用.when()的拋出錯誤或類似的東西?就像從未發生過的驗證一樣?這足夠像setUp:Mockito.enableDebugMode()或其他,也許有這樣的可能性嗎? ..

最好

+0

嘗試簡單地刪除when()並運行測試。如果它變成紅色,這個'when'顯然是必需的。 – ponomandr 2014-08-29 08:23:23

+0

如果你已經重新考慮了你的代碼並破壞了你的測試,那麼你正在做壞事。重新分解後,您的測試應保持綠色。如果你重新考慮更小的步驟,那麼你可以一次處理一個測試用例,而不會在這個黑暗的地方發現自己。此外,你的測試應該是小而容易理解,否則你的課堂測試做得太多。 – Brad 2014-08-30 11:09:25

回答

0

也許你可以爲每個when()調用添加一個verify()調用。所以當調用沒有被執行時拋出一個異常?

如果有問題的自動化解決方案,請留下回復。

2

選項1 你可以從你的測試一次一個(由@ponomandr建議),直到他們未能消除對when()呼叫。失敗的測試意味着您將調用添加到您的測試中,因爲它必須是必需的。

選項2 雖然你也可以通過添加verify()斷言每次調用when()(由@HansiKrankl的建議),這意味着增加更多的代碼(絨毛)到你的測試用例解決這個問題。

選項3 正如你可以使用一個代碼覆蓋工具,如Emma另一種選擇whichi你可以從你的IDE中運行。然後運行測試,然後看看您的課堂中是否正在進行測試。

選項4 還有其他的建議,試圖count the number of invocations

就我個人而言,我會與選項1並開始清理測試一個接一個。您將逐一瞭解對它們進行測試的測試,這是一個清理它們的機會,因此它們更易於維護。

+0

我發現選項1能夠很好地工作,尤其是當您可以通過測試來交替進行小型重構以減少噪音時。 – cjstehno 2015-04-06 21:31:34

0

嗯,什麼是使用Mockito.verifyNoMoreInteractions(YOUR_MOCKS)? 如果使用Mockito.when()配置了一些模擬對象,但在此模擬上未調用相應的Mockito.verify()方法,則會引發異常。 當然可能會導致誤報,但最好沒有。