Android的單元測(cè)試

一,什么是單元測(cè)試敬扛?

單元測(cè)試是開發(fā)人員編寫的晰洒,驗(yàn)證目標(biāo)代碼正確性的代碼

當(dāng)編寫一個(gè)復(fù)雜邏輯的方法時(shí),驗(yàn)證方法的準(zhǔn)確性就需要到單元測(cè)試啥箭。

二谍珊,利用junit進(jìn)行單元測(cè)試

新建一個(gè)工程時(shí),我用的AS2.3已經(jīng)自動(dòng)幫我在主module配置好了Junit急侥,如果手動(dòng)加入的話砌滞,要加入Junit依賴

testCompile'junit:junit:4.12'

然后創(chuàng)建單元測(cè)試類


編寫測(cè)試方法侮邀,類先大概這樣寫:


方法加上@Test注解,這個(gè)是測(cè)試別的方法準(zhǔn)確性的方法贝润,接下來寫被測(cè)試方法绊茧,一般被測(cè)試方法具有很復(fù)雜的邏輯,但我現(xiàn)在的例子只是簡(jiǎn)單寫一個(gè)add方法打掘,就是一個(gè)加法:

int ?add(int ?a, int ?b) {

return ?a + b;

}

現(xiàn)在华畏,要驗(yàn)證這個(gè)加法方法的正確性,開始進(jìn)行真正的單元測(cè)試代碼編寫尊蚁,單元測(cè)試用到一個(gè)Junit的方法?

assertEquals(long ?expected, long ?actual)

先介紹這個(gè)方法亡笑,assertEquals的作用是判斷兩個(gè)值是否相等,該函數(shù)有兩個(gè)參數(shù)横朋,參數(shù)1為預(yù)期的值仑乌,參數(shù)2為計(jì)算得到的值,通過判斷兩個(gè)值是否相等得出結(jié)果叶撒,如果像個(gè)值相等那么測(cè)試通過绝骚,否則失敗。

繼續(xù)上面的加法例子祠够,可以這樣寫測(cè)試代碼:


public class ?ExampleUnitTest {

@Test

public void ?addition_isCorrect()throws ?Exception {

assertEquals(4,add(2,2));

}

int ?add(int ?a, int ?b) {

return ?a + b;

}

}

看assertEquals方法,第一個(gè)參數(shù)是期望值粪牲,第二個(gè)參數(shù)為add方法返回的結(jié)果古瓤,即是希望add(2,2)返回4

我們知道,這是正確的腺阳,先運(yùn)行一下落君,看看會(huì)發(fā)生什么,把光標(biāo)放到ExampleUnitTest類亭引,右鍵run ExampleUnitTest就可以了

這是運(yùn)行后的反應(yīng):


感覺什么都沒發(fā)生绎速,程序運(yùn)行后就正常退出了,那么把測(cè)試代碼改成這樣:


public class? ExampleUnitTest {

@Test

public void ?addition_isCorrect()throws ?Exception {

assertEquals(5,add(2,2));

}

int ?add(int? a, int? b) {

return? a + b;

}

}

assertEquals第一個(gè)參數(shù)期望值改為5焙蚓,再運(yùn)行纹冤,結(jié)構(gòu)如下圖:


運(yùn)行后,出現(xiàn)了錯(cuò)誤购公,并指出了錯(cuò)誤原因:

java.lang.AssertionError:

Expected :5

Actual? :4

它指出了期望值是5萌京,但得到的值是4,因此測(cè)試不通過宏浩。

一般針對(duì)一個(gè)方法編寫測(cè)試代碼時(shí)知残,都要編寫多個(gè)測(cè)試樣例,例如這樣:

assertEquals(0,add(0,0));

assertEquals(1,add(1,0));

assertEquals(2,add(1,1));

assertEquals(0,add(1,-1));

力求盡量覆蓋所有使用場(chǎng)景比庄,由此測(cè)試出來的代碼就有很好的容錯(cuò)性求妹。

三乏盐,Junit的斷言和失敗提示

上面以一個(gè)加法的例子簡(jiǎn)單說明了一個(gè)測(cè)試代碼的編寫和使用,現(xiàn)在介紹Junit的其它相關(guān)功能

單元測(cè)試是驗(yàn)證代碼的正確性制恍,Junit提供了多個(gè)斷言函數(shù)父能,就是以assert開頭的函數(shù),分別用來驗(yàn)證各類相等性問題吧趣。上面已經(jīng)介紹了

assertEquals就不繼續(xù)說明了法竞。還有如下幾類:

1.assertTrue 與assertFalse


assertTrue 與assertFalse是驗(yàn)證真與假,它只有一個(gè)Boolean類型參數(shù)强挫,當(dāng)參數(shù)與assert后面的true或者false對(duì)應(yīng)時(shí)則表示通過岔霸,否則失敗。例如

assertTrue(1==1),就會(huì)測(cè)試通過

2.assertNull與assertNotNull

與上面類似俯渤,assertNull與assertNotNull也只有一個(gè)參數(shù)呆细,但這個(gè)參數(shù)是Object類型,這兩個(gè)函數(shù)用于判斷對(duì)象是否為空或非空八匠,例如

assertNull(null)會(huì)測(cè)試通過絮爷,而assertNull(“12300”)則測(cè)試失敗,assertNotNull原理一樣梨树。

3.assertSame與assertNotSame

assertSame用于判斷兩個(gè)對(duì)象是否為同一個(gè)對(duì)象坑夯,assertNotSame是判斷兩個(gè)對(duì)象不是一個(gè)對(duì)象。

4.failNotEquals

該函數(shù)有三個(gè)參數(shù)抡四,第一個(gè)為失敗時(shí)的提示信息柜蜈,參數(shù)2為期望值旺入,參數(shù)3為實(shí)際值丹鸿,當(dāng)兩個(gè)對(duì)象不相等時(shí)拋出參數(shù)1的錯(cuò)誤信息窒朋,否側(cè)測(cè)試通過

5.failNotSame與failSame

他們參數(shù)一致曾我,不同的是failNotSame兩個(gè)對(duì)象不是同一個(gè)對(duì)象時(shí)拋出參數(shù)1的錯(cuò)誤信息扮匠,否則測(cè)試通過砰琢。

5.fail(String) 與fail()

fail(String)直接拋出當(dāng)前測(cè)試用例參數(shù)1的錯(cuò)誤信息厦酬,而fail()則會(huì)給出默認(rèn)的錯(cuò)誤信息融撞。

四勉耀。如何測(cè)試

測(cè)試是保證程序的準(zhǔn)確性指煎,要盡可能模擬各種條件來執(zhí)行程序確保各執(zhí)行路徑都被覆蓋。下面將列出一些重要的測(cè)試點(diǎn)

1.一致性

值是否和預(yù)期一致瑰排。

2.有序性

值是否像期望的那樣有序或無序

3.區(qū)間性

值是否位于合理的最小值和最大值之間贯要。

4.依賴性

代碼是否引用了一些不在代碼本身控制范圍之內(nèi)的外部資源。當(dāng)這些資源存在或不存在時(shí)代碼是否可以產(chǎn)生相應(yīng)的預(yù)期結(jié)果椭住。

5.存在性

值是否存在崇渗,測(cè)試方法是否可以處理值不存在的情況。

6.基數(shù)性

是否有剛好足夠的值,這里的基數(shù)是指計(jì)數(shù)宅广,測(cè)試方法是否可以準(zhǔn)確計(jì)數(shù)葫掉,并檢查最后的計(jì)數(shù)值

7.時(shí)間性

所以事情的發(fā)生是否有序,是否在準(zhǔn)確的時(shí)刻跟狱,是否剛好及時(shí)俭厚。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市驶臊,隨后出現(xiàn)的幾起案子挪挤,更是在濱河造成了極大的恐慌,老刑警劉巖关翎,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扛门,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡纵寝,警方通過查閱死者的電腦和手機(jī)论寨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來爽茴,“玉大人葬凳,你說我怎么就攤上這事∈易啵” “怎么了火焰?”我有些...
    開封第一講書人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)胧沫。 經(jīng)常有香客問我荐健,道長(zhǎng),這世上最難降的妖魔是什么琳袄? 我笑而不...
    開封第一講書人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮纺酸,結(jié)果婚禮上窖逗,老公的妹妹穿的比我還像新娘。我一直安慰自己餐蔬,他們只是感情好碎紊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著樊诺,像睡著了一般仗考。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上词爬,一...
    開封第一講書人閱讀 51,604評(píng)論 1 305
  • 那天秃嗜,我揣著相機(jī)與錄音,去河邊找鬼。 笑死锅锨,一個(gè)胖子當(dāng)著我的面吹牛叽赊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播必搞,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼必指,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了恕洲?” 一聲冷哼從身側(cè)響起塔橡,我...
    開封第一講書人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎霜第,沒想到半個(gè)月后葛家,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡庶诡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年惦银,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片末誓。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡扯俱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出喇澡,到底是詐尸還是另有隱情迅栅,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布晴玖,位于F島的核電站读存,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏呕屎。R本人自食惡果不足惜让簿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望秀睛。 院中可真熱鬧尔当,春花似錦、人聲如沸蹂安。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽田盈。三九已至畜号,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間允瞧,已是汗流浹背简软。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工蛮拔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人替饿。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓语泽,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親视卢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子踱卵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

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