2010-06-27 44 views
21

最近我做了Mockito框架的切換,對此非常滿意(另請參閱blog-post)。從EasyMock切換到Mockito非常簡單,我設法使測試兼容(即測試用例表現相同)。Mockito比EasyMock更喜歡?

您是否看到真正的原因或槍戰條件,以便比Mockito更喜歡EasyMock?到目前爲止,我所使用的代碼庫不能,但對您的觀點感興趣。

+0

可能的複製http://stackoverflow.com/questions/22697/whats-the-best-mock-framework-for- java – Raedwald 2013-10-22 19:38:03

回答

7

我比Mockito更加熟悉EasyMock,所以我不得不做一點挖掘。 Mockito有一個page,從Mockito的角度做了明確的比較。

正如我看到它,的Mockito的優點是:

  • 存根和驗證
  • 匹配器的顯式分離是基於Hamcrest(也由JUnit的支持)而不是自定義API
  • 創嘲笑總是'好';也就是說,解除鎖定的方法調用返回乾淨的數據(如空列表)而不是失敗

EasyMock具有非常類似的功能集。 Mockito的核心特色是基於EasyMock的那些領域,Mockito團隊認爲這些領域是限制或次優的做法。

從功能角度來看,兩款產品都無法嘲諷靜態方法(我需要在沒有MBeanServer的情況下進行測試),但在這種情況下,您可以在任一框架上使用PowerMock。

我會說與任何適合您的測試要求的樣式。

希望這會有所幫助!

6

Mockito現在可能比我上次嘗試時好一些,但當它將API更改爲與以前版本不兼容時,它會丟失我。升級到最新版本會要求我更改許多現有的單元測試,這是我無法接受的。我認爲這對我的需求來說太不成熟,不穩定。

但這並不意味着它有任何問題。我使用的版本仍然正常,儘管我已經切換回EasyMock。

+0

我可以想象這很痛苦。就我而言,我從1.8.3版本開始。看看發佈說明,API似乎已經穩定下來。 – 2010-06-27 21:49:48

22

的Mockito的開發是爲了讓BDD風格的單元測試,那就是:

  • 考慮(你的單元測試運行的背景下)
  • 當(產生你感興趣的行爲事件在)
  • 然後(你要找的結果)。

,而不是

  • 鑑於
  • 期待(這裏的地方驗證一事無成)
  • 然後(回去看看你在期待中寫道,因爲有沒有實際的信息在這裏)。

恕我直言,它產生更多可讀的測試,並允許你分開諸如你正在運行的上下文(設置Mocks)和驗證你感興趣的行爲等事情。以前的嘲笑框架需要你爲每次互動設定期望值,無論它與您在該測試中看到的行爲方面是否相關。

+2

這不是真的,你不必爲每次互動設定期望值。使用Easymock,你可以設置NiceMock(createNiceMock())。無論如何,我認爲測試對象交互是一個好主意(應該是默認/常見行爲)。我很少使用niceMocks – mickthompson 2010-06-28 11:51:57

+0

Mockito最初是EasyMock的一個分支,在NiceMock存在之前。 在BDD中,它們不是測試 - 只是關於如何使用類的一些示例的行爲描述。 BDD的想法是讓它變得簡單和安全,而不是固定代碼,所以不會中斷。測試是一個很好的副產品。在那個世界裏,測試每一個交互並不像產生可讀的,易於改變的例子那麼有意義。 – Lunivore 2010-06-28 12:06:22

+1

我想測試我的代碼..然後,如果它的可讀性和易於更改是另一回事..我不認爲TDD專家會確認'交互沒有多大意義'。你總是從組件的交互中產生東西...我寧願有一些不太可讀的東西,但測試正確的相互作用。恕我直言交流(作爲可讀/易於更改的代碼)是測試中的主要主題,應該不容易避免 – mickthompson 2010-06-28 12:44:35