您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源單元測(cè)試工具 > junit
利用Ant和JUnit進(jìn)行增量開(kāi)發(fā)
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/1/31 13:59:12 ] 推薦標(biāo)簽:

  按照約定,測(cè)試類(lèi)的名稱(chēng)中包含我所測(cè)試的類(lèi)的名稱(chēng),但將 Test 附加到結(jié)尾。在本例中,我們的測(cè)試類(lèi)是 HelloWorldTest.java 。我復(fù)制了 SkeletonTest 中的代碼,并添加了 testSayHello() 來(lái)測(cè)試 sayHello() 。請(qǐng)注意 HelloWorldTest 擴(kuò)展了 TestCase。JUnit 框架提供了 assert 和 assertEquals 方法,我們可以使用這些方法來(lái)進(jìn)行驗(yàn)證。 HelloWorldTest.java 顯示在清單 2 中。
  清單 2. HelloWorldTest.java
package test.com.company; import com.company.HelloWorld; import junit.framework.TestCase; import junit.framework.AssertionFailedError; /** * JUnit 3.2 testcases for HelloWorld */ public class HelloWorldTest extends TestCase { public HelloWorldTest(String name) { super(name); } public static void main(String args[]) { junit.textui.TestRunner.run(HelloWorldTest.class); } public void testSayHello() { HelloWorld world = new HelloWorld(); assert( world!=null ); assertEquals("Hello World", world.sayHello() ); } }

  testSayHello() 看上去和 HelloWorld.java 中原來(lái)的 main 方法類(lèi)似,但有一個(gè)主要的不同之處。它不是執(zhí)行 System.out.println 并顯示結(jié)果,而是添加了一個(gè) assertEquals() 方法。如果兩個(gè)值不同, assertEquals 將打印出兩個(gè)輸入的值。您可能已經(jīng)注意到這個(gè)方法不起作用!HelloWorld 中的 sayHello() 方法不返回字符串。如果我先寫(xiě)過(guò)測(cè)試,會(huì)捕捉到這一點(diǎn)。我將 "Hello World" 字符串與輸出流聯(lián)結(jié)起來(lái)。這樣,按照清單 3 中顯示的那樣重寫(xiě)了 HelloWorld,去掉 main() ,并更改了 sayHello() 的返回類(lèi)型。
  清單 3. Hello world 測(cè)試案例。
package com.company; public class HelloWorld { public String sayHello() { return "Hello World"; } }

  如果我保留了 main() 并修改了聯(lián)系,代碼看上去如下:
public static void main( String[] args ) { HelloWorld world = new HelloWorld(); System.out.println(world.sayHello()); }

  新的 main() 與我測(cè)試程序中的 testSayHello() 非常相似。是的,它看上去不象是一個(gè)現(xiàn)實(shí)世界中的問(wèn)題(這是人為示例的問(wèn)題),但它說(shuō)明了問(wèn)題。在單獨(dú)的應(yīng)用程序中編寫(xiě) main() 可以改進(jìn)您的設(shè)計(jì),同時(shí)幫助您設(shè)計(jì)測(cè)試,F(xiàn)在我們已經(jīng)創(chuàng)建了一個(gè)測(cè)試類(lèi),讓我們使用 Ant 來(lái)將它集成到構(gòu)建中。

  使用 Ant 將測(cè)試集成到構(gòu)建中
  Jakarta Project 將 Ant 工具說(shuō)成“不帶 make 缺點(diǎn)的 make”。Ant 正在成為開(kāi)放源代碼世界中實(shí)際上的標(biāo)準(zhǔn)。原因很簡(jiǎn)單:Ant 是使用 Java 語(yǔ)言編寫(xiě)的,這種語(yǔ)言可以讓構(gòu)建過(guò)程在多種平臺(tái)上使用。這種特性簡(jiǎn)化了在不同 OS 平臺(tái)之間的程序員的合作,而合作是開(kāi)放源代碼社區(qū)的一種需要。您可以在自己選擇的平臺(tái)上進(jìn)行開(kāi)發(fā) 和 構(gòu)建。Ant 的特性包括:

    類(lèi)可擴(kuò)展性 Java 類(lèi)可用于擴(kuò)展構(gòu)建特性,而不必使用基于 shell 的命令。
    開(kāi)放源代碼 因?yàn)?Ant 是開(kāi)放源代碼,因此類(lèi)擴(kuò)展示例很充足。我發(fā)現(xiàn)通過(guò)示例來(lái)學(xué)習(xí)非常棒。
    XML 可配置 Ant 不僅是基于 Java 的,它還使用 XML 文件配置構(gòu)建過(guò)程。假設(shè)構(gòu)建實(shí)際上是分層的,那么使用 XML 描述 make 過(guò)程是其邏輯層。另外,如果您了解 XML,要學(xué)習(xí)如何配置構(gòu)建更簡(jiǎn)單一些。

  圖 2 簡(jiǎn)要介紹了一個(gè)配置文件。配置文件由目標(biāo)樹(shù)構(gòu)成。每個(gè)目標(biāo)都包含了要執(zhí)行的任務(wù),其中任務(wù)是可以執(zhí)行的代碼。在本例中, mkdir 是目標(biāo) compile 的任務(wù)。 mkdir 是建立在 Ant 中的一個(gè)任務(wù),用于創(chuàng)建目錄。 Ant 帶有一套健全的內(nèi)置任務(wù)。您也可以通過(guò)擴(kuò)展 Ant 任務(wù)類(lèi)來(lái)添加自己的功能。

  每個(gè)目標(biāo)都有的名稱(chēng)和可選的相關(guān)性。目標(biāo)相關(guān)性需要在執(zhí)行目標(biāo)任務(wù)列表之前執(zhí)行。例如圖 2 所示,在執(zhí)行 compile 目標(biāo)中的任務(wù)之前需要先運(yùn)行 JUNIT 目標(biāo)。這種類(lèi)型的配置可以讓您在一個(gè)配置中有多個(gè)樹(shù)。

圖 2. Ant XML 構(gòu)建圖

  與經(jīng)典 make 實(shí)用程序的相似性是非常顯著的。這是理所當(dāng)然的,因?yàn)?make 是 make。但也要記住有一些差異:通過(guò) Java 實(shí)現(xiàn)的跨平臺(tái)和可擴(kuò)展性,通過(guò) XML 實(shí)現(xiàn)的可配置,還有開(kāi)放源代碼。

  下載和安裝 Ant
  首先下載 Ant(請(qǐng)參閱參考資料)。將 Ant 解壓縮到 tools 目錄,再將 Ant bin 目錄添加到路徑中。(在我的機(jī)器上是 e: oolsantin 。)設(shè)置 ANT_HOME 環(huán)境變量。在 NT 中,這意味著進(jìn)入系統(tǒng)屬性,然后以帶有值的變量形式添加 ANT_HOME。ANT_HOME 應(yīng)該設(shè)置為 Ant 根目錄,即包含 bin 和 lib 目錄的目錄。(對(duì)我來(lái)說(shuō),是 e: oolsant 。)確保 JAVA_HOME 環(huán)境變量設(shè)置為安裝了 JDK 的目錄。Ant 文檔有關(guān)于安裝的詳細(xì)信息。

  下載和安裝 JUnit
  下載 JUnit 3.2(請(qǐng)參閱參考資料)。解開(kāi) junit.zip ,并將 junit.jar 添加到 CLASSPATH。如果將 junit.zip 解包到類(lèi)路徑中,可以通過(guò)運(yùn)行以下命令來(lái)測(cè)試安裝: java junit.textui.TestRunner junit.samples.AllTests

  定義目錄結(jié)構(gòu)
  在開(kāi)始我們的構(gòu)建和測(cè)試過(guò)程之前,需要一個(gè)項(xiàng)目布局。圖 3 顯示了我的樣本項(xiàng)目的布局。下面描述了布局的目錄結(jié)構(gòu):

    build -- 類(lèi)文件的臨時(shí)構(gòu)建位置。構(gòu)建過(guò)程將創(chuàng)建這個(gè)目錄。
    src -- 源代碼的位置。 Src 被分為 test 文件夾和 main 文件夾,前者用于所有的測(cè)試代碼,而后者包含可交付的代碼。將測(cè)試代碼與主要代碼分離提供了幾點(diǎn)特性。首先,使主要代碼中的混亂減少。其次,它允許包對(duì)齊。我熱衷與將類(lèi)和與其相關(guān)的包放置在一起。測(cè)試應(yīng)該和測(cè)試在一起。它還有助于分發(fā)過(guò)程,因?yàn)槟悴豢赡艽蛩銓卧獪y(cè)試分發(fā)給客戶。

  在實(shí)際中,我們有多個(gè)目錄,例如 distribution 和 documentation 。我們還會(huì)在 main 下有多個(gè)用于包的目錄,例如 com.company.util 。

  因?yàn)槟夸浗Y(jié)構(gòu)經(jīng)常變動(dòng),所以在 build.xml 中有這些變動(dòng)的全局字符串常數(shù)是很重要的。

圖 3. 項(xiàng)目布局圖

  Ant 構(gòu)建配置文件示例

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