如何使用JUnit提高单元测试覆盖率
看完點(diǎn)個(gè)贊唄,難道想白嫖不成?更多內(nèi)容請(qǐng)?jiān)L問(wèn)微信公眾號(hào) :三國(guó)測(cè),掃碼關(guān)注喲!!
原文鏈接:http://www.cnblogs.com/zishi/p/6726664.html
-----如何快速完成單元測(cè)試代碼
1. JUnit安裝(http://junit.org/junit4/ 目前最新版本是4.12)
注:下面的一些演示圖片是按照我本地的4.11版本,差別不大。
在項(xiàng)目上右鍵- Properties- java build path - Libraries, 點(diǎn)擊Add External JARs, 選中剛剛下載的Junit包即可。如圖所示:
或者使用以下方式添加:
在項(xiàng)目上右鍵- Properties- java build path - Libraries, 點(diǎn)擊Add Library…,如下圖所示:
在彈出窗口中,選中Junit,點(diǎn)擊Next按鈕繼續(xù):
接下來(lái)就是選擇當(dāng)前版本,我們目前使用的大版本是Junit 4,可以看到我本地版本為4.11,點(diǎn)擊Finish按鈕完成:
2. JaCoCo和EclEmma安裝
JaCoCo(Java Code Coverage)是一種分析單元測(cè)試覆蓋率的工具JaCoCo(Java Code Coverage)就是一種分析單元測(cè)試覆蓋率的工具,使用它運(yùn)行單元測(cè)試后,可以給出代碼中哪些部分被單元測(cè)試測(cè)到,哪些部分沒有沒測(cè)到,并且給出整個(gè)項(xiàng)目的單元測(cè)試覆蓋情況百分比,看上去一目了然。EclEmma 是基于 JaCoCo 的一個(gè) Eclipse 插件,開發(fā)人員可以方便的和其交互。下面簡(jiǎn)單介紹這兩個(gè)工具的安裝流程。
JaCoco安裝:
首先我們?cè)L問(wèn)JaCoco網(wǎng)站:http://www.eclemma.org/jacoco/ 下載最新版本,目前是:http://search.maven.org/remotecontent?filepath=org/jacoco/jacoco/0.7.9/jacoco-0.7.9.zip
壓縮包解壓后,將其中的Jar包拷貝到Java工程下面存放第三方Jar包的目錄。比如在我本地存放在這里D: oolsluna-withtestnglunaeclipseplugins
重新啟動(dòng)Eclipse IDE即可加載JaCoCo插件。接下來(lái)我們安裝EclEmma:
打開 Eclipse 的軟件市場(chǎng),在其中搜索 EclEmma,找到后完成安裝,如下圖所示:
直接安裝即可。
3. 自動(dòng)生成單元測(cè)試代碼(默認(rèn)Java項(xiàng)目已Ready):
選擇需要生成單元測(cè)試代碼的項(xiàng)目,并在需要生成測(cè)試代碼的類上點(diǎn)右鍵 - New – Other…,如下圖所示:
在彈出窗口選擇JUnit文件夾,點(diǎn)擊展開,選擇第一個(gè)“JUnit Test Case”,然后點(diǎn)擊“Next”:
確認(rèn)一下選中的Junit版本,其他全部按照默認(rèn)選項(xiàng)即可:
確認(rèn)無(wú)誤,點(diǎn)擊“Next”按鈕,進(jìn)入下一步:
此處選中我們需要生成單元測(cè)試代碼的方法即可,此處我選擇了之前寫好的兩個(gè)需要測(cè)試的函數(shù),然后點(diǎn)擊”Finish”按鈕,最終對(duì)應(yīng)生成的單元測(cè)試代碼如下:
4. 運(yùn)行單元測(cè)試
鼠標(biāo)選中要運(yùn)行的代碼,EclEmma安裝后直接可以點(diǎn)擊IDE上方的工具欄,有一個(gè)運(yùn)行按鈕,如下圖:
注:如果沒有安裝EclEmma插件,可以通過(guò)菜單Run As – Junit test執(zhí)行單元測(cè)試
毫無(wú)疑問(wèn)的,這次運(yùn)行失敗了:
詳細(xì)的失敗log如下:
HelloWorldTest.testAddMethod
testAddMethod(com.test.jacoco.HelloWorldTest)
java.lang.AssertionError: Not yet implemented
at org.junit.Assert.fail(Assert.java:88)
at com.test.jacoco.HelloWorldTest.testAddMethod(HelloWorldTest.java:19)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
………..
從上方的拋出的信息中,可以看到我們生成的斷言中指定的消息“Not yet implemented”,另外,失敗原因是我們默認(rèn)生成的是一個(gè)fail斷言,我們看一下關(guān)于fail斷言的描述:
|
|
fail |
|
|
fail |
所以非常清楚的知道,這個(gè)斷言的用途就是為了使單元測(cè)試立即失敗,它其實(shí)并沒有測(cè)試到我們的具體代碼。
接下來(lái)我們給他們分別添加具體的測(cè)試代碼和斷言,如下圖所示:
代碼完成之后,繼續(xù)調(diào)用Run As – Junit test,運(yùn)行,這次毫無(wú)疑問(wèn)運(yùn)行成功了,看下圖:
這樣我們就完成了兩個(gè)函數(shù)的單元測(cè)試代碼覆蓋。這里我們又用到了兩個(gè)常用斷言:assertNotNull()和
assertEquals()。Junit提供很多斷言方法給我們,正確使用這些斷言可以幫助我們確定被測(cè)試的函數(shù)是否按照預(yù)期的效果正常工作了,非常方便。我們?cè)诒疚牡淖詈蟛糠痔峁┝烁戒浳臋n,詳細(xì)介紹了Junit的全部斷言目錄,有興趣的同學(xué)可以繼續(xù)查看。
5. 查看單元測(cè)試覆蓋率
JaCoCo和EclEmma安裝完成后增加了以下特性:
1、未覆蓋代碼標(biāo)記為紅色,如下圖:
2、已覆蓋代碼會(huì)標(biāo)記為綠色,如圖所示:
3、當(dāng)然也有部分覆蓋的情況,如圖所示(還有可能是因?yàn)榇a未完全執(zhí)行):
4、在Eclipse下方的狀態(tài)欄窗口,增加了一欄“Coverage”,點(diǎn)擊可以顯示詳細(xì)的代碼覆蓋率:
5、顏色也可以在Eclipse中自定義設(shè)置:
以上是本次插件的全部介紹。我們通過(guò)這些工具可以快速生成單元測(cè)試代碼,并利用分析工具將單元測(cè)試覆蓋率盡量提高,這樣我們對(duì)自己開發(fā)的代碼更有信心了。當(dāng)然,我們?cè)谶@里并不是為了單純的追求這個(gè)數(shù)字,在增加單元測(cè)試覆蓋率的誘導(dǎo)下,我們重新理清了測(cè)試的步驟,寫出了更有意義、更全面的單元測(cè)試。而且根據(jù)單元測(cè)試分析工具給的反饋,我們還發(fā)現(xiàn)了先前沒有想到的情形。因此,單元測(cè)試的覆蓋率并不只是一個(gè)為了取悅管理者的數(shù)據(jù),它實(shí)實(shí)在在地幫助我們改善了代碼的質(zhì)量,增加了我們對(duì)所編寫代碼的信心。
6. 附錄文檔:Junit Assert目錄
|
Junit Assert目錄 |
||
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertArrayEquals |
|
|
|
assertEquals |
|
|
|
assertEquals |
|
|
|
assertEquals |
|
|
|
assertEquals |
|
|
|
assertEquals |
|
|
|
assertEquals |
|
|
|
assertEquals |
|
|
|
assertEquals |
|
|
|
assertEquals |
|
|
|
assertEquals |
|
|
|
assertEquals |
|
|
|
assertEquals |
|
|
|
assertFalse |
|
|
|
assertFalse |
|
|
|
assertNotEquals |
|
|
|
assertNotEquals |
|
|
|
assertNotEquals |
|
|
|
assertNotEquals |
|
|
|
assertNotEquals |
|
|
|
assertNotEquals |
|
|
|
assertNotEquals |
|
|
|
assertNotEquals |
|
|
|
assertNotNull |
|
|
|
assertNotNull |
|
|
|
assertNotSame |
|
|
|
assertNotSame |
|
|
|
assertNull |
|
|
|
assertNull |
|
|
|
assertSame |
|
|
|
assertSame |
|
|
|
assertThat |
|
|
|
assertThat |
|
|
|
assertTrue |
|
|
|
assertTrue |
|
|
|
fail |
|
|
|
fail |
|
感謝閱讀,作者原創(chuàng)技術(shù)文章,轉(zhuǎn)載請(qǐng)注明出處
其他推薦相關(guān)閱讀:
單元測(cè)試系列之一:如何使用JUnit、JaCoCo和EclEmma提高單元測(cè)試覆蓋率
單元測(cè)試系列之二:Mock工具Jmockit實(shí)戰(zhàn)
單元測(cè)試系列之三:JUnit單元測(cè)試規(guī)范
單元測(cè)試系列之四:Sonar平臺(tái)中項(xiàng)目主要指標(biāo)以及代碼壞味道詳解
單元測(cè)試系列之五:Mock工具之Mockito實(shí)戰(zhàn)
單元測(cè)試系列之六:JUnit5 技術(shù)前瞻
單元測(cè)試系列之七:Sonar 數(shù)據(jù)庫(kù)表關(guān)系整理一(rule相關(guān))
單元測(cè)試系列之八:Sonar 數(shù)據(jù)庫(kù)表關(guān)系整理一(續(xù))
單元測(cè)試系列之九:Sonar 常用代碼規(guī)則整理(一)
單元測(cè)試系列之十:Sonar 常用代碼規(guī)則整理(二)
單元測(cè)試系列之十一:Jmockit之mock特性詳解
總結(jié)
以上是生活随笔為你收集整理的如何使用JUnit提高单元测试覆盖率的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 关于非法制造、买卖、运输、邮寄、储存枪支
- 下一篇: 中芯国际详解梁孟松、赵海军双剑合璧