您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源單元測(cè)試工具 > junit
JUnit 4 的一些新功能
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/2/26 15:08:29 ] 推薦標(biāo)簽:

        在junit4中開(kāi)始使用這樣的包結(jié)構(gòu):org.junit.* ,而不再像以前使用這樣的包結(jié)構(gòu):junit.framework.*,但是為了向后兼容,在Junit4中將會(huì)讓這兩種包結(jié)構(gòu)并存

繼承上的變化

        你的測(cè)試類(lèi)再也不需要extends這個(gè)類(lèi)junit.framework.TestCase了,而且不用顯示的繼承任何一個(gè)類(lèi),Junit通過(guò)采用JDK 5.0的annotations特性來(lái)完成了這種轉(zhuǎn)變。如果想要執(zhí)行一個(gè)test case,只需要在你的測(cè)試類(lèi)中至少包含一個(gè)這樣的annotation可以了@Test。
        打個(gè)比方,如果你寫(xiě)了這樣的一個(gè)類(lèi),里面只包含了@Before 和 @After這樣的annotation,卻沒(méi)有包含任何的@Test,那么在你開(kāi)始運(yùn)行這個(gè)測(cè)試類(lèi)的時(shí)候,你會(huì)碰到一個(gè)java的異常:java.lang.Exception: No runnable methods.

斷言方法的變化

         因?yàn)樵贘unit 4中,測(cè)試類(lèi)不再繼承TestCase(在這個(gè)類(lèi)里JUnit 3.8版本中定義了assertEquals()等方法),所以你需要使用一個(gè)前綴的語(yǔ)法像這樣:Assert.assertEquals(),或者用JDK 5.0中的靜態(tài)導(dǎo)入,來(lái)導(dǎo)入Assert,之后,你可以像之前那樣使用assertEquals等等這些方法了

        另外,在Junit 4中增加了兩個(gè)新的斷言方法,他們用來(lái)比較兩個(gè)對(duì)象數(shù)組,如果兩個(gè)數(shù)組中的每個(gè)元素都是equal的,那么認(rèn)為這兩個(gè)數(shù)組是equal的:
    public static void assertEquals(String message, Object[] expecteds, Object[] actuals);
    public static void assertEquals(Object[] expecteds, Object[] actuals);

         還有12個(gè)assertEquals 方法已經(jīng)因?yàn)镴DK 5.0中的autoboxing功能而徹底消失了。像這樣assertEquals(long, long) 之前在JUnit 3.8中使用的方法,現(xiàn)在已經(jīng)都統(tǒng)一改用assertEquals(Object, Object)方法。

Fixture

        Fixtures是在測(cè)試期間用來(lái)初始化(initialize)和釋放(release)對(duì)象的一些方法,在 In JUnit 3.8中,需要用setUp() 方法在運(yùn)行測(cè)試方法之前進(jìn)行一些初始化的工作,然后在測(cè)試完成之后用tearDown() 方法來(lái)進(jìn)行善后工作。這兩個(gè)方法都是從父類(lèi)TestCase 中override過(guò)來(lái)的,因此他們的方法聲明及方法名稱(chēng)是固定的。在JUnit 4中我們只要使用這兩個(gè)annotation:@Before 和 @After 可以達(dá)到同樣的目的了,而且我們不用再?gòu)?qiáng)制的讓方法必須叫這兩個(gè)名字了。^_^

測(cè)試方法上的變化

          在JUnit 3.8中,用來(lái)標(biāo)識(shí)一個(gè)測(cè)試方法是通過(guò)它的方法簽名來(lái)實(shí)現(xiàn)的,即方法必須以一個(gè)"test"的前綴來(lái)命名,且必須為void,而且必須沒(méi)有任何參數(shù)(比如:public void testDivide()),那些不遵循這種命名規(guī)則的方法將會(huì)被簡(jiǎn)單的忽略掉,而且不會(huì)拋出任何異常來(lái)表面已經(jīng)發(fā)生了錯(cuò)誤。

        在JUnit 4中沒(méi)有命名上的限制了,只需要在測(cè)試方法的簽名加上一個(gè)這樣的annotation可以了:@Test,像之前的限制:方法必須為void,而且必須沒(méi)有任何參數(shù),這些還是一樣需要,只是限制改為,如果沒(méi)有遵守這些限制,則會(huì)在運(yùn)行的時(shí)候拋出下面的異常:
     java.lang.Exception: Method xxx should have no parameters
     java.lang.Exception: Method xxx should be void
另外,@Test支持可選的expected參數(shù),用來(lái)聲明這個(gè)測(cè)試方法可以?huà)伋鲆粋(gè)異常,如果在測(cè)試時(shí)沒(méi)有拋出異常,或者拋出了一個(gè)其他的異常,都會(huì)認(rèn)為測(cè)試是失敗的。比如可以這樣來(lái)聲明@Test(expected = ArithmeticException.class)。

忽略一個(gè)測(cè)試方法

         如果你在測(cè)試之前知道某個(gè)方法測(cè)試一定會(huì)失敗,但是,你又不想讓測(cè)試失敗,那么你怎么臨時(shí)的讓這個(gè)測(cè)試方法被忽略掉呢?在JUnit 3.8中要么將這個(gè)方法注釋掉,要么需要改變方法名稱(chēng),即不使用test前綴開(kāi)頭來(lái)命名方法,問(wèn)題是當(dāng)測(cè)試的方法很多時(shí),你可能不記得你重命名過(guò)的這個(gè)方法了。而在JUnit 4中可以通過(guò)去掉方法前面的@Test annotation來(lái)達(dá)到目的,但是上面的問(wèn)題依然存在,一個(gè)解決方案是:在需要測(cè)試的方法前/后即@Test的前面或者后面加上@Ignore 可以了,后在測(cè)試報(bào)告中將會(huì)顯示出有多少方法被忽略掉了,同時(shí)會(huì)顯示多少方法運(yùn)行成功,以及多少方法運(yùn)行失敗。Note:@Ignore 有一個(gè)可選的參數(shù),可以用它來(lái)簡(jiǎn)單的記錄為什么這個(gè)方法被忽略掉了。

運(yùn)行測(cè)試

         在JUnit 3.8中你可以有多種運(yùn)行方式:text, AWT或者Swing,但是在JUnit 4中僅使用text方式。

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