您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > junit
Junit概述
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時間:[ 2012/11/29 15:05:46 ] 推薦標簽:
 

4、測試代碼的運行
  先說常用的集成模式。
  測試代碼寫好以后,可以相應(yīng)的類中寫main方法,用java命令直接運行;也可以不寫main方法,用Junit提供的運行器運行。Junit提供了textui,awtui和swingui三種運行器。
  以前面第2步中的AllTests運行為例,可有四種:

java junit.textui.TestRunner junit.samples.AllTests
java junit.awtui.TestRunner junit.samples.AllTests
java junit.swingui.TestRunner junit.samples.AllTests
java junit.samples.AllTests

  main方法中一般也都是簡單地用Runner調(diào)用suite(),當(dāng)沒有main時,TestRunner自己以運行的類為參數(shù)生成了一個TestSuite.
  
  對于命令模式的運行,有兩種方法。

靜態(tài)方法

TestCase test= new MoneyTest("simple add") {
public void runTest() {
testSimpleAdd();
}
};


動態(tài)方法

TestCase test= new MoneyTest("testSimpleAdd");

  我試了一下,好象有問題,哪位朋友成功了,請指點我一下。確實可以。

import junit.framework.*;

public class MoneyTest extends TestCase {//TestCase的子類
    private Money f12CHF;//提取公用的對象
    private Money f14CHF;  
    public MoneyTest(String name){
        super(name);
    }
    protected void setUp() {//初始化公用對象
        f12CHF= new Money(12, "CHF");
        f14CHF= new Money(14, "CHF");
    }
    public void testEquals() {//測試equals方法的正確性
        Assert.assertTrue(!f12CHF.equals(null));
        Assert.assertEquals(f12CHF, f12CHF);
        Assert.assertEquals(f12CHF, new Money(12, "CHF"));
        Assert.assertTrue(!f12CHF.equals(f14CHF));
    }
  
    public void testAdd() {//測試add方法的正確性
        Money expected= new Money(26, "CHF");
        Money result= f12CHF.add(f14CHF);
        Assert.assertTrue(expected.equals(result));
    }
//    public static void main(String[] args) {
//        TestCase test=new MoneyTest("simple add") {
//                public void runTest() {
//                    testAdd();
//                }
//            };
//        junit.textui.TestRunner.run(test);
//    }
    public static void main(String[] args) {
        TestCase test=new MoneyTest("testAdd");
        junit.textui.TestRunner.run(test);
    }
}


再給一個靜態(tài)方法用集成測試的例子:
public static Test suite() {
    TestSuite suite= new TestSuite();
    suite.addTest(
        new testCar("getWheels") {
            protected void runTest() { testGetWheels(); }
        }
    );

    suite.addTest(
        new testCar("getSeats") {
            protected void runTest() { testGetSeats(); }
        }
    );
    return suite;
}


5、應(yīng)用案例


Junit Primer例程,運行如下:
java com.hedong.JunitLearning.Primer.ShoppingCartTest


Ant+Junit+Mailto實現(xiàn)自動編譯、調(diào)試并發(fā)送結(jié)果的build.xml

JUnit實施,寫得很棒,理解也深刻。例程運行如下:
java com.hedong.JunitLearning.car.testCarNoJunit
java junit.swingui.TestRunner com.hedong.JunitLearning.car.testCar


Junit與log4j結(jié)合,阿菜的例程運行:
cd acai
ant junit

6、一些問題
  有人在實踐基礎(chǔ)上總結(jié)出一些非常有價值的使用技巧,我沒有經(jīng)過一一“測試”,暫列在此。

不要用TestCase的構(gòu)造函數(shù)初始化Fixture,而要用setUp()和tearDown()方法。

不要依賴或假定測試運行的順序,因為JUnit利用Vector保存測試方法。所以不同的平臺會按不同的順序從Vector中取出測試方法。不知3.8中是不是還是如此,不過它提供的例子有一個是指定用VectorSuite的,如果不指定呢?

避免編寫有副作用的TestCase。例如:如果隨后的測試依賴于某些特定的交易數(shù)據(jù),不要提交交易數(shù)據(jù)。簡單的回滾可以了。

當(dāng)繼承一個測試類時,記得調(diào)用父類的setUp()和tearDown()方法。

將測試代碼和工作代碼放在一起,一邊同步編譯和更新。(使用Ant中有支持junit的task.)

測試類和測試方法應(yīng)該有一致的命名方案。如在工作類名前加上test從而形成測試類名。

確保測試與時間無關(guān),不要依賴使用過期的數(shù)據(jù)進行測試。導(dǎo)致在隨后的維護過程中很難重現(xiàn)測試。

如果你編寫的軟件面向國際市場,編寫測試時要考慮國際化的因素。不要僅用母語的Locale進行測試。

盡可能地利用JUnit提供地assert/fail方法以及異常處理的方法,可以使代碼更為簡潔。

測試要盡可能地小,執(zhí)行速度快。

把測試程序建立在與被測對象相同的包中

在你的原始代碼目錄中避免測試碼出現(xiàn),可在一個源碼鏡像目錄中放測試碼

在自己的應(yīng)用程序包中包含一個TestSuite測試類

7、相關(guān)資源下載
以下jar包,我只是做了打包、編譯和調(diào)試的工作,供下載學(xué)習(xí)之用,相關(guān)的權(quán)利屬于原作者。

可運行例程.jar

Build.xml

阿菜的例程

Junit API 漢譯(pdf)


8、未完成的任務(wù)


httpunit

cactus

將Junit用鏈接池測試

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