您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > TestNG
TestNG使Java單元測試輕而易舉
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時間:[ 2012/12/24 15:31:58 ] 推薦標(biāo)簽:

JUnit 框架是 Java 語言單元測試當(dāng)前的一站式解決方案。這個框架值得稱贊,因?yàn)樗褱y試驅(qū)動的開發(fā)思想介紹給 Java 開發(fā)人員并教給他們?nèi)绾斡行У鼐帉憜卧獪y試。但是,在過去的幾年中,JUnit 的改進(jìn)不大;所以,為當(dāng)今復(fù)雜的環(huán)境編寫測試已經(jīng)變成一個越來越困難的任務(wù),即 JUnit 必須與其他一些補(bǔ)充性測試框架集成起來。在本文中,F(xiàn)ilippo Diotalevi 介紹了 TestNG,這是一個測試 Java 應(yīng)用程序的新框架。TestNG 不僅確實(shí)強(qiáng)大、創(chuàng)新、可擴(kuò)展、靈活,它還展示了 Java Annotations(JDK 5.0 中的重大新特性)的有趣應(yīng)用。

在每個現(xiàn)代軟件包的構(gòu)造階段,測試這一實(shí)踐都扮演著中心角色。過去那種先編寫代碼,然后有空的時候再測試(或者根本不測試)的日子已經(jīng)一去不返,因?yàn)榇蠖鄶?shù)開發(fā)人員現(xiàn)在認(rèn)識到需要采用編碼和測試彼此交織、同步推進(jìn)的軟件方法論,以便盡早發(fā)現(xiàn) bug,在開發(fā)過程開始的時候識別出主要的風(fēng)險。

JUnit 超過了其他測試框架,推動開發(fā)人員理解了測試尤其是單元測試的用途。利用一個相當(dāng)簡單、實(shí)用、嚴(yán)格的架構(gòu),JUnit 已經(jīng)能夠“傳染”大量開發(fā)人員。(有關(guān)“被測試傳染”的更多信息,請參閱 參考資料。) JUnit 用戶已經(jīng)學(xué)會了單元測試的一些基本規(guī)則:

    每段代碼都必須經(jīng)過測試。
    只要有可能,代碼的測試必須隔離進(jìn)行(例如,使用像 模擬對象 這樣的技術(shù))。
    軟件必須容易測試 —— 也是說,在編寫的時候要想著測試。

但是,隨著開發(fā)人員對測試的信任增長,JUnit 的簡單性和嚴(yán)格性把他們分成兩個相反的派別。一方面,有些人堅信 JUnit 的簡單性對于不斷地提醒程序員軟件也必須保持簡單來說是必不可少的(這稱為 KISS 原則,代表 keep it simple, stupid);另一方面,有些人認(rèn)為 JUnit 不是簡單而是簡化,所以他們想要從測試框架得到新的高級特性、更大的靈活性和更強(qiáng)大的能力。JUnit 的一些特殊特性,是為了滿足這個群體的一些具體批評而推出的:

    因?yàn)?Java 語言的單繼承性,所以必須擴(kuò)展 TestCase 類的限制很大。
    無法向 JUnit 的測試方法傳遞參數(shù),也無法向 setUp() 和 tearDown() 方法傳遞參數(shù)。
    執(zhí)行模型有點(diǎn)奇怪:每次執(zhí)行一個測試方法的時候,都要重新實(shí)例化測試類。
    管理復(fù)雜項(xiàng)目中的不同測試套件有可能非常復(fù)雜。

TestNG 的創(chuàng)造者
TestNG 的創(chuàng)造者是 Cedric Beust,他在 Java 編程領(lǐng)域非常出名,是 EJB 3 專家組的成員,也是其他一些流行的開源項(xiàng)目(例如 EJBGen 和 Doclipse)的創(chuàng)造者。TestNG 在 Apache 軟件許可條款約束下發(fā)布,并可從其 Web 站點(diǎn)下載(請參閱 參考資料 中到該站點(diǎn)和 Cedric 站點(diǎn)的鏈接)。

在本文中,您將學(xué)習(xí)到如何用這個叫做 TestNG 的新測試框架為應(yīng)用程序編寫單元測試。TestNG 的靈感來自 JUnit,同時盡量保持后者的簡單性;但是,TestNG 消除了老框架的大多數(shù)限制,使開發(fā)人員可以編寫更加靈活、更加強(qiáng)大的測試。由于 TestNG 大量借用 Java Annotation(隨 JDK 5.0 引入;有關(guān)這個新特性的更多信息,請參閱 參考資料)來定義測試,所以本文也可以向您演示如何在實(shí)際的生產(chǎn)環(huán)境中使用 Java 語言的這個新特性。

關(guān)于代碼
為了演示 TestNG 的用法,我要為叫做 Jakarta Common Lang 的這個廣泛應(yīng)用的開源庫(其中包含一些處理和操縱字符串、數(shù)字和 Java 對象的有用的類)編寫一些單元測試。在下面的 參考資料 一節(jié)中,您可以找到 TestNG 和 Jakarta Common Lang 庫的鏈接;如果您想在自己的機(jī)器上隨著本文一起練習(xí),這二者都需要下載。

可以在兩個不同的包中得到 TestNG:一個包要求 JDK 5.0,另一個包與 Java 語言 1.4 版本兼容。定義測試的時候,它們使用的語法略有差異:前者使用 JDK 5.0 標(biāo)注,后者使用舊的 Javadoc 風(fēng)格的標(biāo)注。本文使用的是 JDK 5.0 版本,所以在繼續(xù)閱讀本文之前,需要對標(biāo)注有基本的了解;您可以在 參考資料 中找到關(guān)于這個主題的 developerWorks 資源的鏈接。但是,您要知道 只有在編譯和運(yùn)行測試的時候 才需要 JDK 5.0,所以您仍然可以用自己喜歡的編譯器來構(gòu)建應(yīng)用程序。實(shí)際上,您將用從 Jakarata 項(xiàng)目的 Web 站點(diǎn)下載的相同 JAR 文件來測試 Jakarta Common Lang 庫。關(guān)于使用 Java 平臺 1.4 版本的 TestNG 的更多細(xì)節(jié),可以在 TestNG 的 Web 站點(diǎn)上找到。

后,請單擊本文頂部或底部的 Code 圖標(biāo),下載 j-testng-sample.zip 文件,其中包含一些示例,演示了如何用 TestNG 為 Jakarta Commons Lang 編寫單元測試。在里面,可以找到這里給出的大多數(shù)代碼,還有其他一些示例。閱讀本文并不需要這些代碼,但是它可以幫助您更加深入地理解在這里介紹的概念。

TestNG 快速起步
TestNG 的測試類是普通的老式 Java 對象;您不需要擴(kuò)展任何特殊的類,也不需要使用測試方法的任何命名約定:您只要用標(biāo)注 @Test 通知框架這個類的方法是測試。清單 1 演示了實(shí)用類 StringUtils 的一個簡單的測試。它測試 StringUtils 的兩個方法: isEmpty() 方法檢測 String 是否為空; trim() 方法從 String 兩端刪除控制字符。請注意,其中使用了 Java 指令 assert 來檢測錯誤情況。
清單 1. 針對類 StringUtils 的一個測試用例
clearcase/" target="_blank" >cccccc height=17>package tests;

import com.beust.testng.annotations.*;
import org.apache.commons.lang.StringUtils;

public class StringUtilsTest
{
@Test
public void isEmpty()
{
assert StringUtils.isBlank(null);
assert StringUtils.isBlank("");
}

@Test
public void trim()
{
assert "foo".equals(StringUtils.trim(" foo "));
}
}

但是,在運(yùn)行測試之前,必須用特殊的 XML 文件配置 TestNG,習(xí)慣上把這個文件命名為 testng.xml。這個文件的語法非常簡單,如清單 2 所示。這個文件首先定義測試套件 My test suite,這個套件只包含一個測試 First test,這個測試由 StringUtilsTest 類完成。
清單 2. TestNG 的配置文件
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
<suite name="My test suite">
<test name="First test">
<classes>
<class name="tests.StringUtilsTest" />
</classes>
</test>
</suite>

如果這個示例 testng.xml 文件看起來沒什么用處(只有一個測試類),那么好消息是:這實(shí)際上是您定義測試套件時 惟一需要編寫的文件。還記得 JUnit 過去的日子么?在那些日子里,套件的定義可能分布在多個文件中:JUnit 的 TestSuite 文件,屬性文件,還有當(dāng)然缺不了的 Ant 構(gòu)建文件。使用 TestNG,所有必需的數(shù)據(jù)都集中在 testng.xml 文件中。不需要額外的 TestSuite 文件和構(gòu)建文件。

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