您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > junit
探索JUnit 4.4特性
作者:網(wǎng)絡轉(zhuǎn)載 發(fā)布時間:[ 2013/3/12 16:00:38 ] 推薦標簽:

    文通過理論分析和詳細例子向讀者闡述 JUnit 4.4 所帶來的新特性,讀者通過本文的學習,可以輕松掌握使用 JUnit 4.4 的新特性。

    隨著當前 Java 開發(fā)的越發(fā)成熟,Agile 和 TDD 的越發(fā)流行,自動化測試的呼聲也越來越高。若想將單元測試變得自動化,自然 JUnit 這把利器必不可少,這也是 JUnit 自 1997 年誕生以來在 Java 開發(fā)業(yè)界一直相當流行的原因。

    JUnit 是針對 Java 語言的一個單元測試框架,它被認為是迄今為止所開發(fā)的重要的第三方 Java 庫。 JUnit 的優(yōu)點是整個測試過程無需人的參與,無需分析和判斷終測試結果是否正確,而且可以很容易地一次性運行多個測試。 JUnit 的出現(xiàn)促進了測試的盛行,它使得 Java 代碼更健壯,更可靠,Bug 比以前更少。

    JUnit 自從問世以來一直在不停的推出新版本,目前新的版本是 2007 年 7 月發(fā)布的 JUnit 4.4,它是繼 JUnit4 以來大的發(fā)行版,提供了很多有用的新特性。本文將假設讀者已經(jīng)具有 JUnit 4 的使用經(jīng)驗。

    JUnit 4.4 概述

    JUnit 設計的目的是有效地抓住編程人員寫代碼的意圖,然后快速檢查他們的代碼是否與他們的意圖相匹配。 JUnit 發(fā)展至今,版本不停的翻新,但是所有版本都一致致力于解決一個問題,那是如何發(fā)現(xiàn)編程人員的代碼意圖,并且如何使得編程人員更加容易地表達他們的代碼意圖。JUnit 4.4 也是為了如何能夠更好的達到這個目的而出現(xiàn)的。

    JUnit 4.4 主要提供了以下三個大方面的新特性來更好的抓住編程人員的代碼意圖:

    提供了新的斷言語法(Assertion syntax)——assertThat

    提供了假設機制(Assumption)

    提供了理論機制(Theory)

    新的斷言語法(Assertion syntax)—— assertThat

    JUnit 4.4 學習 JMock,引入了 Hamcrest 匹配機制,使得程序員在編寫單元測試的 assert 語句時,可以具有更強的可讀性,而且也更加靈活。

    Hamcrest 是一個測試的框架,它提供了一套通用的匹配符 Matcher,靈活使用這些匹配符定義的規(guī)則,程序員可以更加精確的表達自己的測試思想,指定所想設定的測試條件。比如,有時候定義的測試數(shù)據(jù)范圍太精確,往往是若干個固定的確定值,這時會導致測試非常脆弱,因為接下來的測試數(shù)據(jù)只要稍稍有變化,可能導致測試失。ū热 assertEquals( x, 10 ); 只能判斷 x 是否等于 10,如果 x 不等于 10,測試失敗);有時候指定的測試數(shù)據(jù)范圍又不夠太精確,這時有可能會造成某些本該會導致測試不通過的數(shù)據(jù),仍然會通過接下來的測試,這樣會降低測試的價值。 Hamcrest 的出現(xiàn),給程序員編寫測試用例提供了一套規(guī)則和方法,使用其可以更加精確的表達程序員所期望的測試的行為。(具體 Hamcrest 的使用,請參閱 參考資料)

    JUnit 4.4 結合 Hamcrest 提供了一個全新的斷言語法——assertThat.程序員可以只使用 assertThat 一個斷言語句,結合 Hamcrest 提供的匹配符,可以表達全部的測試思想。

    assertThat 的基本語法如下:

    清單 1 assertThat 基本語法

assertThat( [value], [matcher statement] );

    value 是接下來想要測試的變量值; matcher statement 是使用 Hamcrest 匹配符來表達的對前面變量所期望的值的聲明,如果 value 值與 matcher statement 所表達的期望值相符,則測試成功,否則測試失敗。

    assertThat 的優(yōu)點

    優(yōu)點 1:以前 JUnit 提供了很多的 assertion 語句,如:assertEquals,assertNotSame,assertFalse,assertTrue,assertNotNull,assertNull 等,現(xiàn)在有了 JUnit 4.4,一條 assertThat 即可以替代所有的 assertion 語句,這樣可以在所有的單元測試中只使用一個斷言方法,使得編寫測試用例變得簡單,代碼風格變得統(tǒng)一,測試代碼也更容易維護。

    優(yōu)點 2:assertThat 使用了 Hamcrest 的 Matcher 匹配符,用戶可以使用匹配符規(guī)定的匹配準則精確的指定一些想設定滿足的條件,具有很強的易讀性,而且使用起來更加靈活。如清單 2 所示:

    清單2使用匹配符 Matcher 和不使用之間的比較

// 想判斷某個字符串 s 是否含有子字符串 "developer" 或 "Works" 中間的一個
// JUnit 4.4 以前的版本:assertTrue(s.indexOf("developer")>-1||s.indexOf("Works")>-1 );
// JUnit 4.4:
assertThat(s, anyOf(containsString("developer"), containsString("Works")));
// 匹配符 anyOf 表示任何一個條件滿足則成立,類似于邏輯或 "||", 匹配符 containsString 表示是否含有參數(shù)子
// 字符串,文章接下來會對匹配符進行具體介紹

    優(yōu)點 3:assertThat 不再像 assertEquals 那樣,使用比較難懂的“謂賓主”語法模式(如:assertEquals(3, x);),相反,assertThat 使用了類似于“主謂賓”的易讀語法模式(如:assertThat(x,is(3));),使得代碼更加直觀、易讀。

上一頁1234567下一頁
軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd