異常檢測(cè)
使用 TestNG,您可以非常簡(jiǎn)單、非常容易地檢測(cè)異常的發(fā)生。很明顯,用 JUnit 也可以做這件事,但是正如您在清單 6 中的示例中所看到的,使用 TestNG 的 @ExpectedExceptions 標(biāo)注可以使代碼編寫驚人地容易和簡(jiǎn)單。@ExpectedExceptions 標(biāo)注指明框架能夠容忍拋出的 NumberFormatException 異常,所以不應(yīng)當(dāng)被當(dāng)作是故障。要查看在某行代碼中是否拋出異常,您可以直接在這行代碼之后加入 assert false 語(yǔ)句。這意味著 只有 在指定行中拋出特定類型的異常的時(shí)候,您才會(huì)通過測(cè)試。
清單 6. 用 TestNG 進(jìn)行異常檢測(cè)
public class NumberUtilsTest
{
@Test(groups = {"tests.math"})
@ExpectedExceptions(NumberFormatException.class)
public void test()
{
NumberUtils.createDouble("12.23.45");
assert false; //shouldn't be invoked
}
}
結(jié)束語(yǔ)
在本文中,我提供了 TestNG 的快速實(shí)用介紹,目的是展示如何開始編寫單元測(cè)試。但是,它不是一份完整的參考手冊(cè)。TestNG 還有許多其他非常有用的有趣特性:
可以向測(cè)試方法和配置方法傳遞參數(shù),可以用標(biāo)注或在 XML 配置文件中聲明參數(shù)。
可以在 TestNG 下用“兼容模式”運(yùn)行過去運(yùn)行良好的 Junit 測(cè)試。
可以在測(cè)試組之間建立依賴性,決定它們的執(zhí)行順序。
要了解這個(gè)框架的所有潛力,有必要參閱 TestNG 的文檔(參閱 參考資料)。
所有這些特性,與用于定義測(cè)試的 Java 標(biāo)注一起,使整個(gè)測(cè)試過程更加簡(jiǎn)單、更加靈活。編寫測(cè)試必須遵守的規(guī)則 很少;除此之外,您可以自由選擇自己喜歡的測(cè)試策略。
在使用 TestNG 時(shí)明顯的是,這個(gè)模板已經(jīng)是編寫單元測(cè)試的一個(gè)好選擇了,而且,在設(shè)計(jì)上,它與其他庫(kù)和工具的集成非常簡(jiǎn)單,所以它未來(lái)的發(fā)展會(huì)給開發(fā)人員帶來(lái)一些有趣的新東西。
參考資料
您可以參閱本文在 developerWorks 全球站點(diǎn)上的 英文原文。
請(qǐng)單本文頂部或底部的 Code 圖標(biāo)下載 j-testng-sample.zip,其中包含本文中討論的代碼。
在項(xiàng)目的 Web 站點(diǎn) 下載 TestNG。
運(yùn)行本文的代碼,需要下載 Jakarta Commons Lang 庫(kù)。
如果不熟悉 Java 標(biāo)注,請(qǐng)閱讀 Brett McLaughlin 2004 年 9 月份開始在 developerWorks 上發(fā)表的由兩部分組成的系列文章:
Tiger 中的注釋,第 1 部分: 向 Java 代碼中添加元數(shù)據(jù)
Tiger 中的注釋,第 2 部分: 定制注釋
在 JUnit.org 下載 JUnit。
Malcolm Davis 撰寫的“利用 Ant 和 JUnit 進(jìn)行增量開發(fā)”(developerWorks,2000 年 11 月)是一篇很好的文章,解釋了如何把 JUnit 集成到項(xiàng)目中。
Eric Allen 和 Roy Miller 在他們各自的專欄 診斷 Java 代碼 和 極限編程 中都經(jīng)常提及到單元測(cè)試。
Testdriven.com 是關(guān)于測(cè)試驅(qū)動(dòng)開發(fā)的文章和資源的全面集合。
學(xué)習(xí)更多關(guān)于各種 開源測(cè)試工具。
學(xué)習(xí)更多關(guān)于“使用模仿對(duì)象進(jìn)行單元測(cè)試”,Alexander Day Chaffee 和 William Pietri (developerWorks,2002 年 11 月)。
關(guān)于 JUnit、單元測(cè)試和 TestNG 的大量思想都記錄在 Cedric Beust's blog。
您是否 test infected?了解這個(gè)術(shù)語(yǔ)的意義。
請(qǐng)?jiān)L問 Developer Bookstore,獲得技術(shù)書籍的完整列表,其中包括數(shù)百本 Java 相關(guān)主題 的圖書。