看完點個贊唄,難道想白嫖不成?更多內容請訪問微信公眾號 :三國測,掃碼關注喲!!
原文鏈接:http://www.cnblogs.com/zishi/p/6726664.html
-----如何快速完成單元測試代碼
1. JUnit安裝(http://junit.org/junit4/ 目前最新版本是4.12)
注:下面的一些演示圖片是按照我本地的4.11版本,差別不大。
在項目上右鍵- Properties- java build path - Libraries, 點擊Add External JARs, 選中剛剛下載的Junit包即可。如圖所示:
或者使用以下方式添加:
在項目上右鍵- Properties- java build path - Libraries, 點擊Add Library…,如下圖所示:
在彈出窗口中,選中Junit,點擊Next按鈕繼續:
接下來就是選擇當前版本,我們目前使用的大版本是Junit 4,可以看到我本地版本為4.11,點擊Finish按鈕完成:
2. JaCoCo和EclEmma安裝
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,找到后完成安裝,如下圖所示:
直接安裝即可。
3. 自動生成單元測試代碼(默認Java項目已Ready):
選擇需要生成單元測試代碼的項目,並在需要生成測試代碼的類上點右鍵 - New – Other…,如下圖所示:
在彈出窗口選擇JUnit文件夾,點擊展開,選擇第一個“JUnit Test Case”,然后點擊“Next”:
確認一下選中的Junit版本,其他全部按照默認選項即可:
確認無誤,點擊“Next”按鈕,進入下一步:
此處選中我們需要生成單元測試代碼的方法即可,此處我選擇了之前寫好的兩個需要測試的函數,然后點擊”Finish”按鈕,最終對應生成的單元測試代碼如下:
4. 運行單元測試
鼠標選中要運行的代碼,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的全部斷言目錄,有興趣的同學可以繼續查看。
5. 查看單元測試覆蓋率
JaCoCo和EclEmma安裝完成后增加了以下特性:
1、未覆蓋代碼標記為紅色,如下圖:
2、已覆蓋代碼會標記為綠色,如圖所示:
3、當然也有部分覆蓋的情況,如圖所示(還有可能是因為代碼未完全執行):
4、在Eclipse下方的狀態欄窗口,增加了一欄“Coverage”,點擊可以顯示詳細的代碼覆蓋率:
5、顏色也可以在Eclipse中自定義設置:
以上是本次插件的全部介紹。我們通過這些工具可以快速生成單元測試代碼,並利用分析工具將單元測試覆蓋率盡量提高,這樣我們對自己開發的代碼更有信心了。當然,我們在這里並不是為了單純的追求這個數字,在增加單元測試覆蓋率的誘導下,我們重新理清了測試的步驟,寫出了更有意義、更全面的單元測試。而且根據單元測試分析工具給的反饋,我們還發現了先前沒有想到的情形。因此,單元測試的覆蓋率並不只是一個為了取悅管理者的數據,它實實在在地幫助我們改善了代碼的質量,增加了我們對所編寫代碼的信心。
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 |
|
|
感謝閱讀,作者原創技術文章,轉載請注明出處
其他推薦相關閱讀:
單元測試系列之一:如何使用JUnit、JaCoCo和EclEmma提高單元測試覆蓋率
單元測試系列之四:Sonar平台中項目主要指標以及代碼壞味道詳解