在軟件開發(fā)過程中,每個單元的運行都是非常關(guān)鍵的,并且直接關(guān)系到后期程序員的運行。那么在進(jìn)行軟件開發(fā)過程中,經(jīng)常使用到的單元測試方法有哪些呢,一個好的單元測試是如何進(jìn)行實現(xiàn)的?下面云南電腦培訓(xùn)為大家介紹進(jìn)行Java單元測試的具體方法。
成都創(chuàng)新互聯(lián)公司專注于長汀網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供長汀營銷型網(wǎng)站建設(shè),長汀網(wǎng)站制作、長汀網(wǎng)頁設(shè)計、長汀網(wǎng)站官網(wǎng)定制、成都小程序開發(fā)服務(wù),打造長汀網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供長汀網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
1、使用框架進(jìn)行單元測試
Java能夠提供單元測試方法的框架,在測試過程中,測試NG和JUnit是現(xiàn)在流行的測試框架。JUnit和TestNG框架測試有幾個重要功能:設(shè)置和運行很容易;允許忽略或分組,并一起運行多個測試;支持參數(shù)化測試,并且云南IT培訓(xùn)發(fā)現(xiàn)能夠通過在運行時指定不同的值來執(zhí)行單元測試。
2、謹(jǐn)慎使用測試驅(qū)動開發(fā)
測試驅(qū)動開發(fā)是一個軟件開發(fā)的過程。在整個開發(fā)過程中,在開始編碼的時候,應(yīng)該根據(jù)程序的需求進(jìn)行編程測試。但是昆明IT培訓(xùn)發(fā)現(xiàn)由于這個時候還沒有進(jìn)行編程,所以初次測試會面臨失敗,只需要寫入少量的代碼就能通過測試,進(jìn)行重置代碼。
3、測試代碼的覆蓋率
代碼覆蓋率是以百分比測定執(zhí)行單元測試時進(jìn)行的代碼量。通常,高覆蓋率的代碼包含未被檢測出的錯誤的概率較低,因為更多的源代碼在測試中被執(zhí)行。測試代碼覆蓋率的工具有:Clover,Corbetura,JaCoCo。使用工具測試能夠更好的提高測試質(zhì)量。
4、將測試數(shù)據(jù)外部優(yōu)化
在JUnit4之前,測試用例執(zhí)行的數(shù)據(jù)必須被測試用例硬編碼,這會引起限制。為了使用不同的數(shù)據(jù)執(zhí)行測試,必須修正測試用例代碼。但是,昆明電腦培訓(xùn)認(rèn)為JUnit4以及TestNG支持外部化測試數(shù)據(jù),無需變更源代碼,就可以對不同的數(shù)據(jù)組執(zhí)行測試用例。
單元測試是我們在軟件開發(fā)過程中經(jīng)常用到的一種軟件測試的方法,而今天我們就一起來了解一下,一個好的單元測試都是如何來編輯完成的。
1.使用框架來用于單元測試
Java提供了若干用于單元測試的框架。TestNG和JUnit是流行的測試框架。JUnit和TestNG的一些重要功能:
易于設(shè)置和運行。
支持注釋。
允許忽略或分組并一起執(zhí)行某些測試。
支持參數(shù)化測試,即通過在運行時指定不同的值來運行單元測試。
通過與構(gòu)建工具,如Ant,Maven和Gradle集成來支持自動化的測試執(zhí)行。
EasyMock是一個模擬框架,是單元測試框架,如JUnit和TestNG的補(bǔ)充。EasyMock本身不是一個完整的框架。它只是添加了創(chuàng)建模擬對象以便于測試的能力。例如,我們想要測試的一個方法可以調(diào)用從數(shù)據(jù)庫獲取數(shù)據(jù)的DAO類。在這種情況下,EasyMock可用于創(chuàng)建返回硬編碼數(shù)據(jù)的MockDAO。這使我們能夠輕松地測試我們意向的方法,而不必?fù)?dān)心數(shù)據(jù)庫訪問。
2.謹(jǐn)慎使用測試驅(qū)動開發(fā)!
測試驅(qū)動開發(fā)(TDD)是一個軟件開發(fā)過程,在這過程中,在開始任何編碼之前,我們基于需求來編寫測試。由于還沒有編碼,測試初會失敗。然后寫入小量的代碼以通過測試。然后重構(gòu)代碼,直到被優(yōu)化。
目標(biāo)是編寫覆蓋所有需求的測試,而不是一開始就寫代碼,卻可能甚至都不能滿足需求。TDD是偉大的,因為它導(dǎo)致簡單的模塊化代碼,且易于維護(hù)。總體開發(fā)速度加快,容易發(fā)現(xiàn)缺陷。此外,單元測試被創(chuàng)建作為TDD方法的副產(chǎn)品。
然而,TDD可能不適合所有的情況。在設(shè)計復(fù)雜的項目中,專注于簡單的設(shè)計以便于通過測試用例,而不提前思考可能會導(dǎo)致巨大的代碼更改。此外,TDD方法難以用于與遺留系統(tǒng),GUI應(yīng)用程序或與數(shù)據(jù)庫一起工作的應(yīng)用程序交互的系統(tǒng)。另外,測試需要隨著代碼的改變而更新。
因此,在決定采用TDD方法之前,應(yīng)考慮上述因素,并應(yīng)根據(jù)項目的性質(zhì)采取措施。
3.測量代碼覆蓋率
代碼覆蓋率衡量(以百分比表示)了在運行單元測試時執(zhí)行的代碼量。通常,高覆蓋率的代碼包含未檢測到的錯誤的幾率要低,因為其更多的源代碼在測試過程中被執(zhí)行。云南電腦培訓(xùn)發(fā)現(xiàn)測量代碼覆蓋率的一些佳做法包括:
使用代碼覆蓋工具,如Clover,Corbetura,JaCoCo或Sonar。使用工具可以提高測試質(zhì)量,因為這些工具可以指出未經(jīng)測試的代碼區(qū)域,讓你能夠開發(fā)開發(fā)額外的測試來覆蓋這些領(lǐng)域。
使用 emma 2.1 (emma-stable-2.1.5320-lib) 1. 新建 /home/q/java/emmalib 目錄, 將emma.jar 與 emma_ant.jar 放入 2. 復(fù)制 /server/bin/mobileserver/runServer.sh 到 runServer_emma.sh 修改啟動語句。
使用 emma 2.1 (emma-stable-2.1.5320-lib)
1. 新建 /home/q/java/emmalib 目錄, 將emma.jar 與 emma_ant.jar 放入
2. 復(fù)制 /server/bin/mobileserver/runServer.sh 到 runServer_emma.sh
修改啟動語句
nohup java -Xmx1800M -Xms800m -Xbootclasspath/p:/home/q/java/emmalib/emma.jar -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider -XX:+AggressiveOpts -XX:+UseParallelGC -server -classpath "$jarFile" com.qunar.common.mobileArc.MobileServer conf/TaLog.property conf/TripServer.property $LOG_HOME/error.log 21
復(fù)制 /server/bin/mobileserver/stopServer.sh 到 stopServer_emma.sh
添加覆蓋率導(dǎo)出命令
插入 emma 統(tǒng)計代碼
使用root賬號
1. 備份mobileserver.jar
cp /server/TripAssistant/mobile-server.jar $MOB_JAR_BAK/mobile-server.jar.{$timestamp}
2. 執(zhí)行插入命令
java -cp /home/q/java/emmalib/emma.jar emma instr -m overwrite -cp mobile-server.jar -out coverage.em
輸出如下:
EMMA: processing instrumentation path ...
EMMA: instrumentation path processed in 3117 ms
EMMA: [1000 class(es) instrumented, 126 resource(s) copied]
EMMA: metadata merged into [/server/TripAssistant/coverage.em]
3. 運行mobileserver runServer_emma.sh
sudo sh /server/bin/mobileserver/stopServer.sh sudo sh /server/bin/mobileserver/runServer_emma.sh
在 /server/mobileserverlog/error.log中可見:
EMMA: collecting runtime coverage data ...
EMMA: runtime controller started on port [47653]
emma control 進(jìn)程已啟動
[root@l-wap4.beta.cn1.qunar.com /server/mobileserverlog]# netstat -na | grep 47653
tcp 0 0 0.0.0.0:47653 0.0.0.0:* LISTEN 20926/java
4. 執(zhí)行 覆蓋率文件導(dǎo)出命令
java -cp /home/q/java/emmalib/emma.jar emma ctl -connect localhost:47653 -command coverage.get,coverage.ec
可見輸出:
EMMA: processing control command sequence ...
EMMA: executing [coverage.get (coverage.ec,true,true)] ...
EMMA: coverage.get: local copy of coverage data merged into [/server/TripAssistant/coverage.ec]
EMMA: coverage.get: command completed in 79 ms
EMMA: control command sequence complete
并且當(dāng)前目錄生成文件 coverage.ec
5. 生成報告
java -cp /home/q/java/emmalib/emma.jar emma report -r html -in coverage.em,coverage.ec
指定源代碼生產(chǎn)覆蓋率報告(需先上傳源碼)
java -cp /home/q/java/emmalib/emma.jar emma report -r html -in /server/TripAssistant/coverage.em,/server/TripAssistant/coverage.ec -Dreport.html.out.file=mycoverage/coverage.html -sp /home/liang.zhou/mob_code_dir/mobs_trunk/src/main/java
emma 方式啟動 mobserver
==================================
1. 判斷mobserver.jar size, 大于5M 為已插入過, 小于5M為未插入(需要執(zhí)行插入)
2. 執(zhí)行插入
3. 啟動
4. 檢查啟動狀態(tài)
47653 端口打開
mobileserver 進(jìn)程打開
emma 方式停止 mobserver
==================================
1. 檢查47653端口打開狀態(tài), 檢查coverage.em是否存在
2. 導(dǎo)出覆蓋率文件 coverage.ec, 備份coverage.em (加上時間戳)
3. 導(dǎo)出覆蓋率HTML report (加上對應(yīng)時間戳)
4. kill mobserver 進(jìn)程
ls -lt mobile-server.jar
判斷 $? == 0
判斷mobile-server.jar size是否大于 5M
#!/bin/bash
function stop_mob_server(){
#!/bin/bash
function stop_mob_server(){
pid=`ps aux | grep MobileServer | grep -v grep | awk '
Unknown macro: {print $2}
'`
` kill -9 $
Unknown macro: {pid}
`
sleep 1
echo "Stop mobileserver success."
}
#判斷 emma ctl 是否啟動
port_check_result=`netstat -na | grep 47653 | awk '
Unknown macro: {print $1}
'`
if [ -z $
Unknown macro: {port_check_result}
]; then
echo "Emma ctl port 47653 is not LISTEN. Coverage.ec export operation aborted."
else
#emma ctl 為啟動狀態(tài),導(dǎo)出 coverage.ec, 并備份至 /home/q/mobsrv_cov
if []
fi
分享文章:代碼覆蓋率java 代碼覆蓋率包括
URL分享:http://chinadenli.net/article48/hgoohp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、定制開發(fā)、響應(yīng)式網(wǎng)站、用戶體驗、電子商務(wù)、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)