Java-JUnit4

一劣砍、簡(jiǎn)介

? ? ? ?之前,簡(jiǎn)單的測(cè)試我都是使用print打印控制面板來(lái)實(shí)現(xiàn)查看方法是否實(shí)現(xiàn)了需要的功能,現(xiàn)在,使用junit4便可以直接進(jìn)行測(cè)試,并且不需要自己來(lái)進(jìn)行最終測(cè)試結(jié)果的判定,相比于打印似乎代碼多了,但是長(zhǎng)久來(lái)看,方便的不止那一點(diǎn)腿堤。

? ? ? ?Junit是XUnit的一個(gè)子集,在c++,paython,java語(yǔ)言中測(cè)試框架的名字都不相同姐帚,XUnit是基于測(cè)試驅(qū)動(dòng)的框架圾亏,衍生的產(chǎn)品有jUnit龄坪、pythonUnit砌庄、cppUnit等

? ? ? ?斷言機(jī)制:將程序預(yù)期的結(jié)果與程序運(yùn)行的最終結(jié)果進(jìn)行比對(duì),確保對(duì)結(jié)果的可預(yù)知性奕枢。

? ? ? ?hamcrest-core設(shè)置匹配集規(guī)則的框架娄昆,可用來(lái)增強(qiáng)junit的功能。

二缝彬、使用詳解

1萌焰、基本套路

1)導(dǎo)入jar(右鍵Build Path --> Add Libraries --> Junit --> Junit4)

2)新建測(cè)試類(lèi):右鍵需測(cè)試類(lèi)所在包new --> JUnit Test Case參照自動(dòng)生成的測(cè)試類(lèi)模板(可刪除),寫(xiě)自己的測(cè)試方法

3)運(yùn)行測(cè)試:測(cè)試文件右鍵--> Run as JUnit Test

4)Junit視圖:狀態(tài)條(綠色——測(cè)試成功谷浅;紅色——測(cè)試失敯歉)

5)assertEquals(得到的正確值(即預(yù)測(cè)值),程序得到的值);

2、JUnit規(guī)范

1)測(cè)試方法必須使用@Test進(jìn)行修飾

2)測(cè)試方法必須使用public

void進(jìn)行修飾一疯,不能帶任何參數(shù)

3)新建一個(gè)源代碼目錄來(lái)存放我們的測(cè)試代碼撼玄,一般使用test

4)測(cè)試類(lèi)的包應(yīng)該和被測(cè)試類(lèi)保持一致

5)測(cè)試單元中的每個(gè)方法必須可以獨(dú)立測(cè)試,測(cè)試方法間不能有任何的依賴(lài)

6)測(cè)試類(lèi)使用Test作為類(lèi)名的后綴:被測(cè)試類(lèi)名+Test.java.

7)測(cè)試方法使用test作為方法名的前綴:test+被測(cè)試方法名()

3墩邀、JUnit測(cè)試套件掌猛,批量生成測(cè)試方法

在測(cè)試目錄下直接新建測(cè)試用例Case,更改名稱(chēng)及測(cè)試類(lèi)以及源文件夾

4眉睹、測(cè)試失敗的兩種情況

測(cè)試用例用來(lái)達(dá)到想要的預(yù)期結(jié)果荔茬,但是對(duì)于邏輯錯(cuò)誤無(wú)能為力,也就是可以證明代碼沒(méi)有錯(cuò)竹海,但是不能證明代碼一定對(duì)

1)Failure一般由單元測(cè)試使用的斷言方法判斷失敗所引起慕蔚,這經(jīng)表示測(cè)試點(diǎn)發(fā)現(xiàn)了問(wèn)題,就是說(shuō)程序輸出的結(jié)果和我們預(yù)期的不一樣斋配。

2)error是由代碼異常所引起孔飒,它可以產(chǎn)生于測(cè)試代碼本身的錯(cuò)誤,也可以是被測(cè)試代碼中的一個(gè)隱藏的bug.

5艰争、Junit的運(yùn)行流程

在使用Junit用例新建測(cè)試類(lèi)的時(shí)候十偶,在配置選項(xiàng)中有四個(gè)可選方法

1)@BeforeClass修飾方法會(huì)在所有方法被調(diào)用前執(zhí)行,而且是靜態(tài)的园细,所以當(dāng)測(cè)試類(lèi)被夾在后接著就會(huì)被運(yùn)行惦积,而且在內(nèi)存中它只會(huì)存在一份實(shí)例,他比較適合加載配置文件猛频。

2)@AfterClass所修飾的方法同城用來(lái)對(duì)資源的清理狮崩,如關(guān)閉數(shù)據(jù)庫(kù)的連接

3)@Before和@After會(huì)在每個(gè)測(cè)試方法的最后各執(zhí)行一次

6蛛勉、JUnit常用注解

1)@Test將一個(gè)普通方法修飾成為一個(gè)測(cè)試方法,其包括兩個(gè)可選屬性

a:@Test(expected=異常類(lèi).class)忽略指定異常

b:@Test(timeout=毫秒)避免死循環(huán)睦柴,可以進(jìn)行性能測(cè)試诽凌,在指定時(shí)間內(nèi)進(jìn)行測(cè)試

2)@BeforeClass和@AfterClass會(huì)在所有方法運(yùn)行前/后各執(zhí)行一次,static修飾

3)@Before和@After會(huì)在每個(gè)測(cè)試方法的最后各執(zhí)行一次

4)Ignore所修飾的測(cè)試方法會(huì)被測(cè)試運(yùn)行期所忽略

5)RunWith:可以更改測(cè)試運(yùn)行器org.junit.runner.Runner,一般使用默認(rèn)

三坦敌、JUnit深入使用

1侣诵、JUnit測(cè)試套件使用

可以將所有被測(cè)試方法放到一個(gè)測(cè)試類(lèi)中,進(jìn)行批量運(yùn)行測(cè)試類(lèi)

1)測(cè)試套件就是組織測(cè)試類(lèi)一起運(yùn)行的

a)寫(xiě)一個(gè)作為測(cè)試套件的入口類(lèi)狱窘,這個(gè)類(lèi)不包含其他的方法杜顺,

b)更改測(cè)試運(yùn)行期Suite.class

c)將要測(cè)試的類(lèi)作為數(shù)組傳入到Suite.SuiteClasses({})中

2)例

@RunWith(Suite.class)

@Suite.SuiteClasses({TaskTest1.class,TaskTest2.class,TaskTest3.class})

public class SuiteTest{}

2、JUnit參數(shù)化設(shè)置

是為了解決蘸炸,同樣的測(cè)試類(lèi)中的測(cè)試方法針對(duì)多組測(cè)試數(shù)據(jù)時(shí)的優(yōu)化躬络,編寫(xiě)好對(duì)應(yīng)的代碼,就不用來(lái)來(lái)會(huì)會(huì)的運(yùn)行搭儒、改寫(xiě)同樣的測(cè)試代碼(僅僅為了測(cè)試不同的數(shù)據(jù))

1)步驟:

a)更改默認(rèn)的測(cè)試運(yùn)行器為RunWith(Parameterized.class)

b)聲明變量來(lái)存放預(yù)期值和結(jié)果值

c)聲明一個(gè)返回值為Collection的公共靜態(tài)方法穷当,并使用@Parameters修飾

d)為測(cè)試類(lèi)生命一個(gè)帶有參數(shù)的公共構(gòu)造函數(shù),并在其中位置聲明變量賦值

2)例

@RunWith(Parameterized.class)

public class ParameterTest {

int expected = 0;int input1 = 0;int input2 = 0;

@Parameters

public static Collection t() {

return Arrays.asList(new Object[][]{

{3,1,2},{4,2,2} });}

public ParameterTest (int expected,int input1, int input2) {

this.expected = expected;

this.input1 = input1;this.input2 = input2;}

@Test

public void testAdd(){

assertEquals(expected,new Calculate().add(input1, input2));

}}

四淹禾、總結(jié)

1馁菜、@Test

2、@Test(Timeout=毫秒)铃岔,@Test(expected=異常類(lèi))

3火邓、@Ignore

4、@RunWith

5德撬、@BeforeClass @AfterClass @Before @After

6铲咨、測(cè)試套件@RunWith(Suite.class)

7、參數(shù)化設(shè)置@RunWith(Parameterized.class)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蜓洪,一起剝皮案震驚了整個(gè)濱河市纤勒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌隆檀,老刑警劉巖摇天,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異恐仑,居然都是意外死亡泉坐,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)裳仆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)腕让,“玉大人,你說(shuō)我怎么就攤上這事〈客瑁” “怎么了偏形?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)觉鼻。 經(jīng)常有香客問(wèn)我俊扭,道長(zhǎng),這世上最難降的妖魔是什么坠陈? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任萨惑,我火速辦了婚禮,結(jié)果婚禮上仇矾,老公的妹妹穿的比我還像新娘庸蔼。我一直安慰自己,他們只是感情好若未,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布朱嘴。 她就那樣靜靜地躺著倾鲫,像睡著了一般粗合。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上乌昔,一...
    開(kāi)封第一講書(shū)人閱讀 51,541評(píng)論 1 305
  • 那天隙疚,我揣著相機(jī)與錄音,去河邊找鬼磕道。 笑死供屉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的溺蕉。 我是一名探鬼主播伶丐,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼疯特!你這毒婦竟也來(lái)了哗魂?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤漓雅,失蹤者是張志新(化名)和其女友劉穎录别,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體邻吞,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡组题,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了抱冷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片崔列。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖旺遮,靈堂內(nèi)的尸體忽然破棺而出峻呕,到底是詐尸還是另有隱情利职,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布瘦癌,位于F島的核電站猪贪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏讯私。R本人自食惡果不足惜热押,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望斤寇。 院中可真熱鬧桶癣,春花似錦、人聲如沸娘锁。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)莫秆。三九已至间雀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間镊屎,已是汗流浹背惹挟。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缝驳,地道東北人连锯。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像用狱,于是被迫代替她去往敵國(guó)和親运怖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理夏伊,服務(wù)發(fā)現(xiàn)摇展,斷路器,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • JUnit Intro Android基于JUnit Framework來(lái)書(shū)寫(xiě)測(cè)試代碼署海。JUnit是基于Java語(yǔ)...
    chandarlee閱讀 2,263評(píng)論 0 50
  • 注意事項(xiàng): 測(cè)試方法上必須使用@Test修飾 測(cè)試方法必須使用public void進(jìn)行修飾吗购,不能帶任何參數(shù) 新建...
    魯克巴克詩(shī)閱讀 1,766評(píng)論 0 3
  • 1.初級(jí)篇 1.1 單元測(cè)試 我們?cè)诰帉?xiě)大型程序的時(shí)候,需要寫(xiě)成千上萬(wàn)個(gè)方法或函數(shù)砸狞,這些函數(shù)的功能可能很強(qiáng)大捻勉,但我...
    流川楓AI閱讀 2,465評(píng)論 0 8
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法刀森,內(nèi)部類(lèi)的語(yǔ)法踱启,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線(xiàn)程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,631評(píng)論 18 399