EasyMock and Mock Objects Overview :
接下來的文章必須前提在你知道或用過 JUnit, 如果你對 JUnit 不熟悉的話, 可以先閱讀 JUnit Tutorial 這邊的教學.
- Testing and Mock Objects
Unit testing 被定義於與對類別進行測試進行區隔 (Unit test 通常是 Method based). 設計一個Java 類別通常會與其他 Java 類別相依. 而 Mock 物件就像一個 dummy 介面或類別用來當作你要測試方法的參數而該 Mock 物件會有該測試類別預期的行為或回傳值. 而夠過該 Mock 類別物件可以使你在進行測試時不會與外部類別相依. 舉的例子原本你的類別需要透過 DB access 來取的測試資料, 而你可以透過 Mock 類別來提供你的類別所需的測試資料來避免與 DB 的相依性.
因此你在進行 Unit 測試時, 為了避免連整個 DB 連線都測到, 最好的方法就是透過定義的 Mock 類別提供欲測試的類別來擺脫環境或數據的相依性, 進而獨立的測試你想要測試的方法或類別. 因此有了 Mock framework 來模擬這個過程.
- EasyMock
EasyMock 是一個熱門的 Mock framework, 透過它你可以很方便的和 JUnit 進行整合, 底下將會舉一個使用該 Mock framework 的範例進行說明.
Using Easy Mock and Junit :
在開始範例前, 先進行環境的設置, 首先到EasyMock 官方網頁下載 EasyMock. 並將 easymock.jar 加入到你的 classpath. 接著還要下載 ASM 與 cglib 的相依類別並加入到你的 classpath :
接著透過你的 IDE 新建一個 Java Project 並建立以下類別. 而我們將對 IncomeCalculator 類別進行測試, 但該類別相依於另一個介面ICalcMethod 與列舉 EPosition :
透過方法 expect 告訴 easy mock 去建立對應的方法與該方法需要的參數. 而 andReturn 方法定義了該方法的回傳值. 而方法 times 定義了Mock object 的該方法會被呼叫幾次. 而方法 reply 則告訴framework 建立的 Mock object 生效並於接下來的執行過程透過方法 verify 來確認你的 Mock Object 是否如你預期的被執行, 底下是 JUnit 的執行結果 :
沒有留言:
張貼留言