2009-12-29 110 views

回答

11

默認情況下,Easymock會爲任何您未明確設置期望的方法引發異常。

14

從EasyMock的documentation

尼斯嘲笑

論模擬返回的Mock對象()的所有方法的默認行爲是拋出一個AssertionError所有意想不到的方法調用。如果您希望默認允許所有方法調用並返回適當的空值(0,null或false)的「好」Mock對象,請改用niceMock()。

所以你問的是默認行爲。

+0

我發現默認行爲很煩人,因爲您很容易在測試中「最終」要求測試代碼效率低下。我曾經做過一個簡單的重構,將一個getSomething()調用移到一個循環外部,這導致測試失敗,因爲我沒有調用getSomething 40次(!),而「非常好」的mock鼓勵這種類型的測試(因爲它如果我預期在重構之前只有一次調用,將會失敗)。 – 2011-06-08 09:32:45

+1

@Stein:同意。單元測試應該是細粒度的,理想情況下只測試一件事情。 「不好」的嘲笑阻止了這一點。 – 2011-06-08 10:04:45

+1

從我讀到的問題中,OP想要一個模擬,如果它被調用,將會失敗驗證。好的嘲笑不是OP想要的,因爲當測試期間調用好的模擬器時,它仍然通過驗證。 – 2017-01-20 18:36:03

14

我知道這個問題很老,但我有同樣的問題作爲OP,並做了更多的四處看看。我發現以下解決方案:

在EasyMock聲明結束時添加​​3210,當調用模擬方法時,測試將失敗。

之所以這比單純地不使用NiceMock更好,並且由於unmocked方法調用而導致測試失敗,是因爲這允許您專門測試在給定場景中未調用XYZ方法。

我想給大衛華萊士信貸這個答案。我發現這個解決方案在他的回答如下:Test that void method didn't get called with EasyMock

+2

我相信這應該是公認的答案。原因是單元測試通常會隨着新的需求而改變,並且很容易錯過爲什麼沒有設定模擬期望。該解決方案使缺少的方法調用顯式化,因此需要更改代碼的人員的更多關注。 – mindreader 2016-06-30 19:36:55

相關問題