學習筆記 Mock Object Framework – mockito

做Unit Testing時,待測單元有時會需要與別的物件或單元互動,若該單元還沒完成或是需要獨立測試時,mock object就能拿來模擬別的單元,用來假設其它單元一切正常,測試起來會更清晰。

實作mock的概念方法有許多,目前用過兩種:

  1. 自己寫mock object

  2. 使用mock object framework

當測試情境不覆雜時,自己寫是個不錯的方式,能清楚知道整個測試專案(一個獨立於開發中的環境)的脈絡,但mock object類別充斥在測試專案中,維護起來就麻煩,故此,用別人寫好的framework,就是比較適當的做法。試過的framework有EasyMockjMockmockito,本來網路上查到較多人用的是EasyMock,所以也跟著用,但實在是「不好操作」,所以又放了一段時間沒用;近日在網友的blog上看到Mockito,我照著官方教學試了試,甚好,下面將重點概念做個記錄。

mockito Mock Object基本概念

網友fcamel在<<使用 Mockito 更輕鬆地寫 unit test>>文中提到

四種不同層級的輔助元件: dummy、stub、spy、mock:

  • dummy: 什麼事也不做。

  • stub: 依據輸入傳回物件,藉此控制後續的邏輯。(相對來說) 不在意被呼叫的方式,像是何時被呼叫、呼叫了幾次等。

  • spy: 用來確認該物件如何被使用。比方說呼叫 cursor 物件的 commit() 前有沒有先呼叫 execute()。

  • mock: 同stub + spy,既需要傳回物件供待測方法使用,也在意它如何被呼叫。

拿這種概念分類修正自己對mock的理解相當不錯,搭配上適當的練習,決定要在下個專案使用它。

Mockito實現了上述概念,至於怎麼使用就不在此覆述,官網的教學相當清楚,先做過一遍在心裡留個底,實務上在找適合的地方運出來。

有趣的是,官網FAQ認為mockito並不是mock object framework

…Technically speaking Mockito is a Test Spy framework. Usually developers use Mockito instead of a mocking framework. Test Spy framework allows to verify behaviour (like mocks) and stub methods (like good old hand-crafted stubs).

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s