1. 程式人生 > >Java開發測試工具用法簡略記錄——Junit4 And EasyMock

Java開發測試工具用法簡略記錄——Junit4 And EasyMock

Junit是Java中用於測試的一個單元庫,其包含以下幾項重要功能:

設定@Test的 expected 、timeout等引數來測試異常和超時。

忽略壞掉或不完整的測試,可以通過新增@Ignore註解來實現。

韌體是測試前和測試後必須執行的操作,通過註解@BeforeClass、@AfterClass、@Before、@After來實現。在類層次,有 @BeforeClass 和 @AfterClass,在方法(或測試)層次,有 @Before 和 @After。

捆綁多個測試類,進行以組為單位的測試。使用@Runwith和@SuiteClasses註解來實現:

偶爾,應用程式的業務邏輯要求您編寫許多不定量的測試來保證其健壯。在 JUnit 之前的版本中,這種場景很不方便,主要是因為一個測試中方法的引數組各不相同,意味著要為每一個單獨的組編寫一個測試用例。 詳情參照部落格:https://www.ibm.com/developerworks/cn/education/java/j-junit4/index.html

EasyMock 是一個針對 Java 程式語言的開放原始碼 mock 物件庫,可以幫助您快速輕鬆地建立用於這些用途的 mock 物件。EasyMock 使用動態代理,讓您只用一行程式碼就能夠建立任何介面的基本實現。 mock 物件有助於從測試中消除依賴項。它們使測試更單元化。涉及 mock 物件的測試中的失敗很可能是要測試的方法中的失敗,不太可能是依賴項中的問題。這有助於隔離問題和簡化除錯。 新增依賴:

假設我們有一個這樣一個介面:

現在我們另一個類的測試依賴於這個介面,它需要一個該介面的實現才能繼續測試。這時,我們不需要真的建立一個該介面的實現類,並且例項化它。我們只需要用Mock建立一個ExchangeRate介面的模擬實現即可,簡單快捷:

沒錯,就是這麼簡單,只需要3步我們就建立成功了。 1. 步驟1,使用EasyMock的靜態方法createMock()建立介面的Mock物件。 2. 步驟2,使用EasyMock的靜態方法expect()設定期望值。把方法作為引數傳遞給 EasyMock.expect() 方法。然後呼叫 andReturn() 指定呼叫這個方法應該得到什麼結果。 3. 步驟3,呼叫 EasyMock.replay() 方法,讓 mock 準備在下一次呼叫時重放記錄的資料。

mock 最常見的用途之一是測試異常條件。例如,無法簡便地根據需要製造網路故障,但是可以建立模擬網路故障的 mock。

這裡的新東西是 andThrow() 方法。顧名思義,它只是讓 getRate() 方法在被呼叫時丟擲指定的異常。

在預設情況下,EasyMock 只允許測試用例用指定的引數呼叫指定的方法。但是,gpa怎麼算有時候這有點兒太嚴格了,所以有辦法放寬這一限制。例如,假設希望允許把任何字串傳遞給 getRate() 方法,而不僅限於 USD 和 EUR。那麼,可以指定 EasyMock.anyObject() 而不是顯式的字串,如下所示:

類似的方法還有:

EasyMock 不僅能夠檢查是否用正確的引數呼叫預期的方法。它還可以檢查是否以正確的次序呼叫這些方法,而且只調用了這些方法。在預設情況下,不執行這種檢查。要想啟用它,應該在測試方法末尾呼叫 EasyMock.verify(mock)。 檢查是否只調用 getRate() 一次:

該功能基本上只有在大型專案中才會用到,不易理解,等需要用到時再回來查