您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源單元測(cè)試工具 > junit
單元測(cè)試?yán)鱆Unit
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/3/29 14:59:08 ] 推薦標(biāo)簽:

    參數(shù)化測(cè)試的編寫(xiě)稍微有點(diǎn)麻煩(當(dāng)然這是相對(duì)于 JUnit 中其它特性而言):

    為準(zhǔn)備使用參數(shù)化測(cè)試的測(cè)試類(lèi)指定特殊的運(yùn)行器 org.junit.runners.Parameterized。
    為測(cè)試類(lèi)聲明幾個(gè)變量,分別用于存放期望值和測(cè)試所用數(shù)據(jù)。
    為測(cè)試類(lèi)聲明一個(gè)使用注解 org.junit.runners.Parameterized.Parameters 修飾的,返回值為 java.util.Collection 的公共靜態(tài)方法,并在此方法中初始化所有需要測(cè)試的參數(shù)對(duì)。
    為測(cè)試類(lèi)聲明一個(gè)帶有參數(shù)的公共構(gòu)造函數(shù),并在其中為第二個(gè)環(huán)節(jié)中聲明的幾個(gè)變量賦值。
   編寫(xiě)測(cè)試方法,使用定義的變量作為參數(shù)進(jìn)行測(cè)試。
   我們按照這個(gè)標(biāo)準(zhǔn),重新改造一番我們的單元測(cè)試代碼:

Java代碼 復(fù)制代碼

    package com.ai92.cooljunit;  
     
    import static org.junit.Assert.assertEquals;  
     
    import java.util.Arrays;  
    import java.util.Collection;  
     
    import org.junit.Test;  
    import org.junit.runner.RunWith;  
    import org.junit.runners.Parameterized;  
    import org.junit.runners.Parameterized.Parameters;  
     
    @RunWith(Parameterized.class)  
    public class TestWordDealUtilWithParam {  
     
            private String expected;  
          
            private String target;  
          
            @Parameters 
            public static Collection words(){  
                    return Arrays.asList(new Object[][]{  
                    {"employee_info", "employeeInfo"},      //測(cè)試一般的處理情況  
                    {null, null},                           //測(cè)試 null 時(shí)的處理情況  
                    {"", ""},                               //測(cè)試空字符串時(shí)的處理情況  
                    {"employee_info", "EmployeeInfo"},      //測(cè)試當(dāng)首字母大寫(xiě)時(shí)的情況  
                    {"employee_info_a", "employeeInfoA"},   //測(cè)試當(dāng)尾字母為大寫(xiě)時(shí)的情況  
                    {"employee_a_info", "employeeAInfo"}    //測(cè)試多個(gè)相連字母大寫(xiě)時(shí)的情況  
                    });  
            }  
          
            /** 
            * 參數(shù)化測(cè)試必須的構(gòu)造函數(shù) 
            * @param expected   期望的測(cè)試結(jié)果,對(duì)應(yīng)參數(shù)集中的第一個(gè)參數(shù) 
            * @param target 測(cè)試數(shù)據(jù),對(duì)應(yīng)參數(shù)集中的第二個(gè)參數(shù) 
            */ 
            public TestWordDealUtilWithParam(String expected , String target){  
                this.expected = expected;  
                this.target = target;  
            }  
          
            /** 
            * 測(cè)試將 Java 對(duì)象名稱(chēng)到數(shù)據(jù)庫(kù)名稱(chēng)的轉(zhuǎn)換 
            */ 
            @Test public void wordFormat4DB(){  
                assertEquals(expected, WordDealUtil.wordFormat4DB(target));  
            }  
    } 

    很明顯,代碼瘦身了。在靜態(tài)方法 words 中,我們使用二維數(shù)組來(lái)構(gòu)建測(cè)試所需要的參數(shù)列表,其中每個(gè)數(shù)組中的元素的放置順序并沒(méi)有什么要求,只要和構(gòu)造函數(shù)中的順序保持一致可以了,F(xiàn)在如果再增加一種測(cè)試情況,只需要在靜態(tài)方法 words 中添加相應(yīng)的數(shù)組即可,不再需要復(fù)制粘貼出一個(gè)新的方法出來(lái)了。

JUnit 和 Ant

    隨著項(xiàng)目的進(jìn)展,項(xiàng)目的規(guī)模在不斷的膨脹,為了保證項(xiàng)目的質(zhì)量,有計(jì)劃的執(zhí)行全面的單元測(cè)試是非常有必要的。但單靠JUnit提供的測(cè)試套件很難勝任這項(xiàng)工作,因?yàn)轫?xiàng)目中單元測(cè)試類(lèi)的個(gè)數(shù)在不停的增加,測(cè)試套件卻無(wú)法動(dòng)態(tài)的識(shí)別新加入的單元測(cè)試類(lèi),需要手動(dòng)修改測(cè)試套件,這是一個(gè)很容易遺忘得步驟,稍有疏忽會(huì)影響全面單元測(cè)試的覆蓋率。

    當(dāng)然解決的方法有多種多樣,其中將 JUnit 與構(gòu)建利器 Ant 結(jié)合使用可以很簡(jiǎn)單的解決這個(gè)問(wèn)題。Ant —— 備受贊譽(yù)的 Java 構(gòu)建工具。它憑借出色的易用性、平臺(tái)無(wú)關(guān)性以及對(duì)項(xiàng)目自動(dòng)測(cè)試和自動(dòng)部署的支持,成為眾多項(xiàng)目構(gòu)建過(guò)程中不可或缺的獨(dú)立工具,并已經(jīng)成為事實(shí)上的標(biāo)準(zhǔn)。Ant 內(nèi)置了對(duì) JUnit 的支持,它提供了兩個(gè) Task:junit 和 junitreport,分別用于執(zhí)行 JUnit 單元測(cè)試和生成測(cè)試結(jié)果報(bào)告。使用這兩個(gè) Task 編寫(xiě)構(gòu)建腳本,可以很簡(jiǎn)單的完成每次全面單元測(cè)試的任務(wù)。

    不過(guò),在使用 Ant 運(yùn)行 JUnit 之前,您需要稍作一些配置。打開(kāi) Eclipse 項(xiàng)界面,選擇 Ant -> Runtime 項(xiàng)(見(jiàn)圖7),將 JUnit 4.1 的 JAR 文件添加到 Classpath Tab 頁(yè)中的 Global Entries 設(shè)置項(xiàng)里。記得檢查一下 Ant Home Entries 設(shè)置項(xiàng)中的 Ant 版本是否在 1.7.0 之上,如果不是請(qǐng)?zhí)鎿Q為新版本的 Ant JAR 文件。

圖7 Ant Runtime 項(xiàng)

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