Junit4 | 在eclipse中使用Junit4進行單元測試(中)

在這篇文章中伞芹,我們來仔細分析一下這個測試框架中的每一個細節(jié)掀鹅,知其然更要知其所以然,才能更加熟練地應(yīng)用JUnit4单鹿。

(一)所必須導(dǎo)入的包

在測試類中用到了JUnit4框架,自然要把相應(yīng)地Package包含進來深纲。最主要地一個Package就是org.junit.*仲锄。把它包含進來之后,絕大部分功能就有了湃鹊。還有一句話也非常地重要“import static org.junit.Assert.*;”儒喊,我們在測試的時候使用的一系列assertEquals方法就來自這個包。大家注意一下币呵,這是一個靜態(tài)包含(static)怀愧,是JDK5中新增添的一個功能侨颈。也就是說,assertEquals是Assert類中的一系列的靜態(tài)方法芯义,一般的使用方式是Assert. assertEquals()哈垢,但是使用了靜態(tài)包含后,前面的類名就可以省略了扛拨,使用起來更加的方便耘分。

代碼如下:

import static org.junit.Assert.*;

import org.junit.Before;

import org.junit.Ignore;

import org.junit.Test;
    @Test
    public void testAdd() {
        calculator.add(2);
        calculator.add(3);
        assertEquals(5, calculator.getResult());//因為導(dǎo)入靜態(tài)包,直接使用方法绑警,不需要類名.方法
    }

(二)測試類的聲明

大家注意到求泰,我們的測試類是一個獨立的類,沒有任何父類计盒。測試類的名字也可以任意命名渴频,沒有任何局限性。所以我們不能通過類的聲明來判斷它是不是一個測試類章郁,它與普通類的區(qū)別在于它內(nèi)部的方法的聲明枉氮,即通過對函數(shù)或者類的“標注”來區(qū)別測試類跟普通類,我們接著會講到暖庄。

(三)創(chuàng)建一個待測試的對象聊替。

你要測試哪個類,那么你首先就要創(chuàng)建一個該類的對象培廓。正如上一篇文章中的代碼:

private static Calculator calculator = new Calculator();

為了測試Calculator類惹悄,我們必須創(chuàng)建一個calculator對象。

(四)測試方法的聲明

在測試類中肩钠,并不是每一個方法都是用于測試的泣港,你必須使用“標注”來明確表明哪些是測試方法〖劢常“標注”也是JDK5的一個新特性当纱,用在此處非常恰當(dāng)。我們可以看到踩窖,在某些方法的前有@Before坡氯、@Test、@Ignore等字樣洋腮,這些就是標注箫柳,以一個“@”作為開頭。這些標注都是JUnit4自定義的啥供,熟練掌握這些標注的含義非常重要悯恍。

(五)編寫一個簡單的測試方法

首先,你要在方法的前面使用@Test標注伙狐,以表明這是一個測試方法涮毫。對于方法的聲明也有如下要求:名字可以隨便取瞬欧,沒有任何限制,但是返回值必須為void窒百,而且不能有任何參數(shù)黍判。如果違反這些規(guī)定,會在運行時拋出一個異常篙梢。至于方法內(nèi)該寫些什么,那就要看你需要測試些什么了美旧。比如:

    @Test        //標注為測試方法
    public void testAdd() {
        calculator.add(2);
        calculator.add(3);
        assertEquals(5, calculator.getResult());
    }

我們想測試一下“加法”功能時候正確渤滞,就在測試方法中調(diào)用幾次add函數(shù),初始值為0榴嗅,先加2妄呕,再加3,我們期待的結(jié)果應(yīng)該是5嗽测。如果最終實際結(jié)果也是5绪励,則說明add方法是正確的,反之說明它是錯的唠粥。assertEquals(5, calculator.getResult());就是來判斷期待結(jié)果和實際結(jié)果是否相等疏魏,第一個參數(shù)填寫期待結(jié)果,第二個參數(shù)填寫實際結(jié)果晤愧,也就是通過計算得到的結(jié)果大莫。這樣寫好之后,JUnit會自動進行測試并把測試結(jié)果反饋給用戶官份。

(六)忽略測試某些尚未完成的方法

如果你在寫程序前做了很好的規(guī)劃只厘,那么哪些方法是什么功能都應(yīng)該實現(xiàn)定下來。因此舅巷,即使該方法尚未完成羔味,他的具體功能也是確定的,這也就意味著你可以為他編寫測試用例钠右。但是赋元,如果你已經(jīng)把該方法的測試用例寫完,但該方法尚未完成爬舰,那么測試的時候一定是“失敗”们陆。這種失敗和真正的失敗是有區(qū)別的,因此JUnit提供了一種方法來區(qū)別他們情屹,那就是在這種測試函數(shù)的前面加上@Ignore標注坪仇,這個標注的含義就是“某些方法尚未完成,暫不參與此次測試”垃你。這樣的話測試結(jié)果就會提示你有幾個測試被忽略椅文,而不是失敗喂很。一旦你完成了相應(yīng)函數(shù),只需要把@Ignore標注刪去皆刺,就可以進行正常的測試少辣。

代碼如下:

    @Ignore("Multiply() Not yet implemented")
    @Test
    public void testMultiply() {
            //測試內(nèi)容
    }

(七)Fixture(暫且翻譯為“固定代碼段”)

Fixture的含義就是“在某些階段必然被調(diào)用的代碼”。比如我們上面的測試羡蛾,由于只聲明了一個Calculator對象漓帅,他的初始值是0,但是測試完加法操作后痴怨,他的值就不是0了忙干;接下來測試減法操作,就必然要考慮上次加法操作的結(jié)果浪藻。這絕對是一個很糟糕的設(shè)計捐迫!我們非常希望每一個測試都是獨立的,相互之間沒有任何耦合度爱葵。因此施戴,我們就很有必要在執(zhí)行每一個測試之前,對Calculator對象進行一個“復(fù)原”操作萌丈,以消除其他測試造成的影響赞哗。因此,“在任何一個測試執(zhí)行之前必須執(zhí)行的代碼”就是一個Fixture浓瞪,我們用@Before來標注它懈玻,如前面例子所示:

    @Before
    public void setUp() throws Exception {
        calculator.clear();
    }

這里不在需要@Test標注,因為這不是一個test乾颁,而是一個Fixture涂乌。同理,如果“在任何測試執(zhí)行之后需要進行的收尾工作”也是一個Fixture英岭,使用@After來標注湾盒。由于本例比較簡單,沒有用到此功能诅妹。

未完待續(xù)罚勾。。吭狡。


學(xué)習(xí)之余尖殃,放松一下吧^-^
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市划煮,隨后出現(xiàn)的幾起案子送丰,更是在濱河造成了極大的恐慌,老刑警劉巖弛秋,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件器躏,死亡現(xiàn)場離奇詭異俐载,居然都是意外死亡,警方通過查閱死者的電腦和手機登失,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門遏佣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人揽浙,你說我怎么就攤上這事状婶。” “怎么了馅巷?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵太抓,是天一觀的道長。 經(jīng)常有香客問我令杈,道長,這世上最難降的妖魔是什么碴倾? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任逗噩,我火速辦了婚禮,結(jié)果婚禮上跌榔,老公的妹妹穿的比我還像新娘异雁。我一直安慰自己,他們只是感情好僧须,可當(dāng)我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布纲刀。 她就那樣靜靜地躺著,像睡著了一般担平。 火紅的嫁衣襯著肌膚如雪示绊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天暂论,我揣著相機與錄音面褐,去河邊找鬼。 笑死取胎,一個胖子當(dāng)著我的面吹牛展哭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播闻蛀,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼匪傍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了觉痛?” 一聲冷哼從身側(cè)響起役衡,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎秧饮,沒想到半個月后映挂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泽篮,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年柑船,在試婚紗的時候發(fā)現(xiàn)自己被綠了帽撑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡鞍时,死狀恐怖亏拉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情逆巍,我是刑警寧澤及塘,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站锐极,受9級特大地震影響笙僚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜灵再,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一肋层、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧翎迁,春花似錦栋猖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至痴腌,卻和暖如春雌团,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背衷掷。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工辱姨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人戚嗅。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓雨涛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親懦胞。 傳聞我的和親對象是個殘疾皇子替久,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容