日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

如何使用JUnit提高单元测试覆盖率

發(fā)布時(shí)間:2024/8/24 综合教程 27 生活家
生活随笔 收集整理的這篇文章主要介紹了 如何使用JUnit提高单元测试覆盖率 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

看完點(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è)到,哪些部分沒(méi)有沒(méi)測(cè)到,并且給出整個(gè)項(xiàng)目的單元測(cè)試覆蓋情況百分比,看上去一目了然。EclEmma 是基于 JaCoCo 的一個(gè) Eclipse 插件,開(kāi)發(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:

打開(kāi) Eclipse 的軟件市場(chǎng),在其中搜索 EclEmma,找到后完成安裝,如下圖所示:

直接安裝即可。

3. 自動(dòng)生成單元測(cè)試代碼(默認(rèn)Java項(xiàng)目已Ready):

選擇需要生成單元測(cè)試代碼的項(xiàng)目,并在需要生成測(cè)試代碼的類(lèi)上點(diǎn)右鍵 - New – Other…,如下圖所示:

在彈出窗口選擇JUnit文件夾,點(diǎn)擊展開(kāi),選擇第一個(gè)“JUnit Test Case”,然后點(diǎn)擊“Next”:

確認(rèn)一下選中的Junit版本,其他全部按照默認(rèn)選項(xiàng)即可:

確認(rèn)無(wú)誤,點(diǎn)擊“Next”按鈕,進(jìn)入下一步:

此處選中我們需要生成單元測(cè)試代碼的方法即可,此處我選擇了之前寫(xiě)好的兩個(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)行按鈕,如下圖:

注:如果沒(méi)有安裝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斷言的描述:

static void

fail()
Fails a test with no message.

static void

fail(String message)
Fails a test with the given message.

所以非常清楚的知道,這個(gè)斷言的用途就是為了使單元測(cè)試立即失敗,它其實(shí)并沒(méi)有測(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ì)自己開(kāi)發(fā)的代碼更有信心了。當(dāng)然,我們?cè)谶@里并不是為了單純的追求這個(gè)數(shù)字,在增加單元測(cè)試覆蓋率的誘導(dǎo)下,我們重新理清了測(cè)試的步驟,寫(xiě)出了更有意義、更全面的單元測(cè)試。而且根據(jù)單元測(cè)試分析工具給的反饋,我們還發(fā)現(xiàn)了先前沒(méi)有想到的情形。因此,單元測(cè)試的覆蓋率并不只是一個(gè)為了取悅管理者的數(shù)據(jù),它實(shí)實(shí)在在地幫助我們改善了代碼的質(zhì)量,增加了我們對(duì)所編寫(xiě)代碼的信心。

6. 附錄文檔:Junit Assert目錄

Junit Assert目錄

static void

assertArrayEquals(boolean[] expecteds, boolean[] actuals)
Asserts that two boolean arrays are equal.

static void

assertArrayEquals(byte[] expecteds, byte[] actuals)
Asserts that two byte arrays are equal.

static void

assertArrayEquals(char[] expecteds, char[] actuals)
Asserts that two char arrays are equal.

static void

assertArrayEquals(double[] expecteds, double[] actuals,
double delta)

Asserts that two double arrays are equal.

static void

assertArrayEquals(float[] expecteds, float[] actuals,
float delta)

Asserts that two float arrays are equal.

static void

assertArrayEquals(int[] expecteds, int[] actuals)
Asserts that two int arrays are equal.

static void

assertArrayEquals(long[] expecteds, long[] actuals)
Asserts that two long arrays are equal.

static void

assertArrayEquals(Object[] expecteds, Object[] actuals)
Asserts that two object arrays are equal.

static void

assertArrayEquals(short[] expecteds, short[] actuals)
Asserts that two short arrays are equal.

static void

assertArrayEquals(String message, boolean[] expecteds, boolean[]
actuals)

Asserts that two boolean arrays are equal.

static void

assertArrayEquals(String message, byte[] expecteds, byte[]
actuals)

Asserts that two byte arrays are equal.

static void

assertArrayEquals(String message, char[] expecteds, char[]
actuals)

Asserts that two char arrays are equal.

static void

assertArrayEquals(String message, double[] expecteds, double[]
actuals, double delta)

Asserts that two double arrays are equal.

static void

assertArrayEquals(String message, float[] expecteds, float[]
actuals, float delta)

Asserts that two float arrays are equal.

static void

assertArrayEquals(String message, int[] expecteds, int[] actuals)
Asserts that two int arrays are equal.

static void

assertArrayEquals(String message, long[] expecteds, long[]
actuals)

Asserts that two long arrays are equal.

static void

assertArrayEquals(String message, Object[] expecteds, Object[] actuals)
Asserts that two object arrays are equal.

static void

assertArrayEquals(String message, short[] expecteds, short[]
actuals)

Asserts that two short arrays are equal.

static void

assertEquals(double expected, double actual)
Deprecated. Use assertEquals(double expected, double actual, double
delta)
instead

static void

assertEquals(double expected, double actual, double
delta)

Asserts that two doubles are equal to within a positive delta.

static void

assertEquals(float expected, float actual, float
delta)

Asserts that two floats are equal to within a positive delta.

static void

assertEquals(long expected, long actual)
Asserts that two longs are equal.

static void

assertEquals(Object[] expecteds, Object[] actuals)
Deprecated. use assertArrayEquals

static void

assertEquals(Object expected, Object actual)
Asserts that two objects are equal.

static void

assertEquals(String message, double expected, double actual)
Deprecated. Use assertEquals(String message, double expected, double
actual, double delta)
instead

static void

assertEquals(String message, double expected, double actual,
double delta)

Asserts that two doubles are equal to within a positive delta.

static void

assertEquals(String message, float expected, float actual,
float delta)

Asserts that two floats are equal to within a positive delta.

static void

assertEquals(String message, long expected, long actual)
Asserts that two longs are equal.

static void

assertEquals(String message, Object[] expecteds, Object[] actuals)
Deprecated. use assertArrayEquals

static void

assertEquals(String message, Object expected, Object actual)
Asserts that two objects are equal.

static void

assertFalse(boolean condition)
Asserts that a condition is false.

static void

assertFalse(String message, boolean condition)
Asserts that a condition is false.

static void

assertNotEquals(double unexpected, double actual, double
delta)

Asserts that two doubles are not equal to within a positive delta.

static void

assertNotEquals(float unexpected, float actual, float delta)
Asserts that two floats are not equal to within a positive delta.

static void

assertNotEquals(long unexpected, long actual)
Asserts that two longs are not equals.

static void

assertNotEquals(Object unexpected, Object actual)
Asserts that two objects are not equals.

static void

assertNotEquals(String message, double unexpected, double
actual, double delta)

Asserts that two doubles are not equal to within a positive delta.

static void

assertNotEquals(String message, float unexpected, float actual,
float delta)

Asserts that two floats are not equal to within a positive delta.

static void

assertNotEquals(String message, long unexpected, long actual)
Asserts that two longs are not equals.

static void

assertNotEquals(String message, Object unexpected, Object actual)
Asserts that two objects are not equals.

static void

assertNotNull(Object object)
Asserts that an object isn't null.

static void

assertNotNull(String message, Object object)
Asserts that an object isn't null.

static void

assertNotSame(Object unexpected, Object actual)
Asserts that two objects do not refer to the same object.

static void

assertNotSame(String message, Object unexpected, Object actual)
Asserts that two objects do not refer to the same object.

static void

assertNull(Object object)
Asserts that an object is null.

static void

assertNull(String message, Object object)
Asserts that an object is null.

static void

assertSame(Object expected, Object actual)
Asserts that two objects refer to the same object.

static void

assertSame(String message, Object expected, Object actual)
Asserts that two objects refer to the same object.

static

<T> void

assertThat(String reason, T actual, Matcher<? super T> matcher)
Asserts that actual satisfies the condition specified by matcher.

static

<T> void

assertThat(T actual, Matcher<? super T> matcher)
Asserts that actual satisfies the condition specified by matcher.

static void

assertTrue(boolean condition)
Asserts that a condition is true.

static void

assertTrue(String message, boolean condition)
Asserts that a condition is true.

static void

fail()
Fails a test with no message.

static void

fail(String message)
Fails a test with the given message.

感謝閱讀,作者原創(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。