更多原創測試技術文章同步更新到微信公衆號 :三國測,敬請掃碼關注我的的微信號,感謝!html
原文連接:http://www.cnblogs.com/zishi/p/6726664.htmljava
-----如何快速完成單元測試代碼數據庫
注:下面的一些演示圖片是按照我本地的4.11版本,差異不大。api
在項目上右鍵- Properties- java build path - Libraries, 點擊Add External JARs, 選中剛剛下載的Junit包便可。如圖所示:微信
或者使用如下方式添加:oracle
在項目上右鍵- Properties- java build path - Libraries, 點擊Add Library…,以下圖所示:eclipse
在彈出窗口中,選中Junit,點擊Next按鈕繼續:maven
接下來就是選擇當前版本,咱們目前使用的大版本是Junit 4,能夠看到我本地版本爲4.11,點擊Finish按鈕完成:函數
JaCoCo(Java Code Coverage)是一種分析單元測試覆蓋率的工具JaCoCo(Java Code Coverage)就是一種分析單元測試覆蓋率的工具,使用它運行單元測試後,能夠給出代碼中哪些部分被單元測試測到,哪些部分沒有沒測到,而且給出整個項目的單元測試覆蓋狀況百分比,看上去一目瞭然。EclEmma 是基於 JaCoCo 的一個 Eclipse 插件,開發人員能夠方便的和其交互。下面簡單介紹這兩個工具的安裝流程。工具
JaCoco安裝:
首先咱們訪問JaCoco網站: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:\tools\luna-withtestng\luna\eclipse\plugins
從新啓動Eclipse IDE便可加載JaCoCo插件。接下來咱們安裝EclEmma:
打開 Eclipse 的軟件市場,在其中搜索 EclEmma,找到後完成安裝,以下圖所示:
直接安裝便可。
選擇須要生成單元測試代碼的項目,並在須要生成測試代碼的類上點右鍵 - New – Other…,以下圖所示:
在彈出窗口選擇JUnit文件夾,點擊展開,選擇第一個「JUnit Test Case」,而後點擊「Next」:
確認一下選中的Junit版本,其餘所有按照默認選項便可:
確認無誤,點擊「Next」按鈕,進入下一步:
此處選中咱們須要生成單元測試代碼的方法便可,此處我選擇了以前寫好的兩個須要測試的函數,而後點擊」Finish」按鈕,最終對應生成的單元測試代碼以下:
鼠標選中要運行的代碼,EclEmma安裝後直接能夠點擊IDE上方的工具欄,有一個運行按鈕,以下圖:
注:若是沒有安裝EclEmma插件,能夠經過菜單Run As – Junit test執行單元測試
毫無疑問的,此次運行失敗了:
詳細的失敗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」,另外,失敗緣由是咱們默認生成的是一個fail斷言,咱們看一下關於fail斷言的描述:
|
fail |
|
因此很是清楚的知道,這個斷言的用途就是爲了使單元測試當即失敗,它其實並無測試到咱們的具體代碼。
接下來咱們給他們分別添加具體的測試代碼和斷言,以下圖所示:
代碼完成以後,繼續調用Run As – Junit test,運行,此次毫無疑問運行成功了,看下圖:
這樣咱們就完成了兩個函數的單元測試代碼覆蓋。這裏咱們又用到了兩個經常使用斷言:assertNotNull()和 assertEquals()。Junit提供不少斷言方法給咱們,正確使用這些斷言能夠幫助咱們肯定被測試的函數是否按照預期的效果正常工做了,很是方便。咱們在本文的最後部分提供了附錄文檔,詳細介紹了Junit的所有斷言目錄,有興趣的同窗能夠繼續查看。
JaCoCo和EclEmma安裝完成後增長了如下特性:
1、未覆蓋代碼標記爲紅色,以下圖:
2、已覆蓋代碼會標記爲綠色,如圖所示:
3、固然也有部分覆蓋的狀況,如圖所示(還有多是由於代碼未徹底執行):
4、在Eclipse下方的狀態欄窗口,增長了一欄「Coverage」,點擊能夠顯示詳細的代碼覆蓋率:
5、顏色也能夠在Eclipse中自定義設置:
以上是本次插件的所有介紹。咱們經過這些工具能夠快速生成單元測試代碼,並利用分析工具將單元測試覆蓋率儘可能提升,這樣咱們對本身開發的代碼更有信心了。固然,咱們在這裏並非爲了單純的追求這個數字,在增長單元測試覆蓋率的誘導下,咱們從新理清了測試的步驟,寫出了更有意義、更全面的單元測試。並且根據單元測試分析工具給的反饋,咱們還發現了先前沒有想到的情形。所以,單元測試的覆蓋率並不僅是一個爲了取悅管理者的數據,它實實在在地幫助咱們改善了代碼的質量,增長了咱們對所編寫代碼的信心。
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 |
|
|
感謝閱讀,做者原創技術文章,轉載請註明出處
其餘推薦相關閱讀:
單元測試系列之一:如何使用JUnit、JaCoCo和EclEmma提升單元測試覆蓋率
單元測試系列之四:Sonar平臺中項目主要指標以及代碼壞味道詳解