一、JUnit基礎(chǔ)知識(shí)
1、幾個(gè)相關(guān)的概念
白盒測(cè)試——把測(cè)試對(duì)象看作一個(gè)打開(kāi)的盒子,程序內(nèi)部的邏輯結(jié)構(gòu)和其他信息對(duì)測(cè)試人員是公開(kāi)的。
回歸測(cè)試——軟件或環(huán)境的修復(fù)或更正后的“再測(cè)試”,自動(dòng)測(cè)試工具對(duì)這類(lèi)測(cè)試尤其有用。
單元測(cè)試——是小粒度的測(cè)試,以測(cè)試某個(gè)功能或代碼塊。一般由程序員來(lái)做,因?yàn)樗枰纼?nèi)部程序設(shè)計(jì)和編碼的細(xì)節(jié)。
JUnit ——是一個(gè)開(kāi)發(fā)源代碼的Java測(cè)試框架,用于編寫(xiě)和運(yùn)行可重復(fù)的測(cè)試。他是用于單元測(cè)試框架體系xUnit的一個(gè)實(shí)例(用于java語(yǔ)言)。主要用于白盒測(cè)試,回歸測(cè)試。
二、 Junit入門(mén)簡(jiǎn)介
1、JUnit的好處和JUnit單元測(cè)試編寫(xiě)原則
好處:
A、可以使測(cè)試代碼與產(chǎn)品代碼分開(kāi)。
B、針對(duì)某一個(gè)類(lèi)的測(cè)試代碼通過(guò)較少的改動(dòng)便可以應(yīng)用于另一個(gè)類(lèi)的測(cè)試。
C、易于集成到測(cè)試人員的構(gòu)建過(guò)程中,JUnit和Ant的結(jié)合可以實(shí)施增量開(kāi)發(fā)。
D、JUnit是公開(kāi)源代碼的,可以進(jìn)行二次開(kāi)發(fā)。
C、可以方便地對(duì)JUnit進(jìn)行擴(kuò)展。
編寫(xiě)原則:
A、是簡(jiǎn)化測(cè)試的編寫(xiě),這種簡(jiǎn)化包括測(cè)試框架的學(xué)習(xí)和實(shí)際測(cè)試單元的編寫(xiě)。
B、是使測(cè)試單元保持持久性。
C、是可以利用既有的測(cè)試來(lái)編寫(xiě)相關(guān)的測(cè)試。
3.2、JUnit的特征
A、使用斷言方法判斷期望值和實(shí)際值差異,返回Boolean值。
B、測(cè)試驅(qū)動(dòng)設(shè)備使用共同的初始化變量或者實(shí)例。
C、測(cè)試包結(jié)構(gòu)便于組織和集成運(yùn)行。
D、支持圖型交互模式和文本交互模式。
3.3、JUnit框架組成
A、對(duì)測(cè)試目標(biāo)進(jìn)行測(cè)試的方法與過(guò)程集合,可稱(chēng)為測(cè)試用例(TestCase)。
B、測(cè)試用例的集合,可容納多個(gè)測(cè)試用例(TestCase),將其稱(chēng)作測(cè)試包(TestSuite)。
C、測(cè)試結(jié)果的描述與記錄。(TestResult) 。
D、測(cè)試過(guò)程中的事件監(jiān)聽(tīng)者(TestListener)。
E、每一個(gè)測(cè)試方法所發(fā)生的與預(yù)期不一致?tīng)顩r的描述,稱(chēng)其測(cè)試失敗元素(TestFailure)
F、JUnit Framework中的出錯(cuò)異常(AssertionFailedError)。
JUnit框架是一個(gè)典型的Composite模式:TestSuite可以容納任何派生自Test的對(duì)象;當(dāng)調(diào)用TestSuite對(duì)象的run()方法是,會(huì)遍歷自己容納的對(duì)象,逐個(gè)調(diào)用它們的run()方法。
三、Junit中測(cè)試私有函數(shù)的方法
eclipse中如何寫(xiě)一個(gè)測(cè)試私有方法的junit?
假設(shè)類(lèi)Summer定義如下:
public class Summer{
private int methodone(String argsone){
//method code
.......
return 4;
}
}
測(cè)試如下:
public class SummerTest extends TestCase {
public void testMethodone(){
Object rightResult = xxxxx;
Summer example = new Summer.newInstance();
Method m = example .getClass().getDeclaredMethod("methodone",new Class[]{String.class});
m.setAclearcase/" target="_blank" >ccessible(true);
Object result = m.invoke(example ,new Object[] {new String(xxxx)});
m.setAccessible(false);
if (result.equals(rightResult)){
//your code
......
}
}