Android單元測試(三)

本文介紹了如何利用JaCoCo生成單元測試及覆蓋率報告并在Jenkins顯示測試報告結果。

本文首發(fā):http://yuweiguocn.github.io/
新浪微博:@于衛(wèi)國

《西江月·夜行黃沙道中》
明月別枝驚鵲,清風半夜鳴蟬瞒滴。
稻花香里說豐年。聽取蛙聲一片。
七八個星天外弦疮,兩三點雨山前。
舊時茅店社林邊蜘醋,路轉溪橋忽見。
—宋咏尝,辛棄疾

集成JaCoCo

Jacoco的全稱為Java Code Coverage(Java代碼覆蓋率)压语,可以生成java的單元測試代碼覆蓋率報告。

新建一個jacoco.gradle文件编检,并輸入以下內容:

apply plugin: 'jacoco'

jacoco {
    toolVersion = "0.7.7.201606060606" //指定jacoco的版本
    reportsDir = file("$buildDir/JacocoReport") //指定jacoco生成報告的文件夾
}
//依賴于testDebugUnitTest任務
task jacocoTestReport(type: JacocoReport, dependsOn: 'testDebugUnitTest') {
    group = "reporting" //指定task的分組
    reports {
        xml.enabled = true //開啟xml報告
        html.enabled = true //開啟html報告
    }

    def debugTree = fileTree(dir: "${buildDir}/intermediates/classes/debug",
            includes: ["**/*Presenter.*"],
            excludes: ["*.*"])//指定類文件夾胎食、包含類的規(guī)則及排除類的規(guī)則,這里我們生成所有Presenter類的測試報告
    def mainSrc = "${project.projectDir}/src/main/java" //指定源碼目錄

    sourceDirectories = files([mainSrc])
    classDirectories = files([debugTree])
    executionData = files("${buildDir}/jacoco/testDebugUnitTest.exec")//指定報告數(shù)據(jù)的路徑

}

然后在應用Module下的build.gradle文件中引用剛新建的gradle文件:

apply from: 'jacocotest.gradle'

同步sync工程之后可以在任務列表看到新增加的任務:


圖 jacocoTestReport任務

雙擊執(zhí)行任務后可以在Build文件夾找到生成的覆蓋率報告:


圖 單元測試結果目錄結構

其中testDebugUnitTest任務會生成單元測試結果報告允懂,包含xml及html格式分別對應test-results和reports文件夾厕怜;jacocoTestReport任務會生成單元測試覆蓋率報告,結果存放在jacoco和JacocoReport文件夾蕾总。


圖 單元測試HTML報告結果


圖 單元測試覆蓋率報告概覽


圖 單元測試覆蓋率類報告概覽


圖 單元測試覆蓋率類覆蓋情況

可以看到覆蓋情況被不同的顏色標識出來粥航,其中綠色表示代碼被單元測試覆蓋到,黃色表示部分覆蓋生百,紅色則表示完全沒有覆蓋到递雀。

Jenkins配置

在Jenkins上配置好倉庫地址及分支,然后通過shell執(zhí)行gradle任務生成測試報告:

./gradlew clean jacocoTestReport --info

在增加構建后操作步驟添加發(fā)布單元測試報告及JaCoCo覆蓋率報告:


圖 增加構建后操作步驟

注:如果沒有JaCoCo覆蓋率功能蚀浆,請先安裝JaCoCo插件缀程,插件地址:https://wiki.jenkins.io/display/JENKINS/JaCoCo+Plugin


圖 單元測試報告及覆蓋率配置

構建成功后可以在狀態(tài)頁面看到最新測試結果、測試結果趨勢及代碼覆蓋率趨勢:


圖 Jenkins工程頁面

點擊趨勢圖表可以看到更詳細的和本地生成的報告類似的頁面市俊。

常見問題

1.本地生成的單元測試覆蓋率報告正常杨凑,但在Jenkins顯示的單元測試覆蓋率全是0%。

解決方案:此為JaCoCo的一個bug摆昧,請嘗試更新JaCoCo版本解決此問題撩满。遇到有問題的版本號是0.7.4.201502262128,更新為0.7.7.201606060606版本后解決此問題。如果沒能解決請參考stackoverflow中的解決方案鹦牛。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末搞糕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子曼追,更是在濱河造成了極大的恐慌榜轿,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哭尝,死亡現(xiàn)場離奇詭異茸时,居然都是意外死亡,警方通過查閱死者的電腦和手機晶伦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門碟狞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人婚陪,你說我怎么就攤上這事族沃。” “怎么了泌参?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵脆淹,是天一觀的道長。 經(jīng)常有香客問我沽一,道長盖溺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任铣缠,我火速辦了婚禮烘嘱,結果婚禮上,老公的妹妹穿的比我還像新娘蝗蛙。我一直安慰自己蝇庭,他們只是感情好,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布歼郭。 她就那樣靜靜地躺著遗契,像睡著了一般。 火紅的嫁衣襯著肌膚如雪病曾。 梳的紋絲不亂的頭發(fā)上牍蜂,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天,我揣著相機與錄音泰涂,去河邊找鬼鲫竞。 笑死,一個胖子當著我的面吹牛逼蒙,可吹牛的內容都是我干的从绘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼僵井!你這毒婦竟也來了陕截?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤批什,失蹤者是張志新(化名)和其女友劉穎农曲,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體驻债,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡乳规,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了合呐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暮的。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖淌实,靈堂內的尸體忽然破棺而出冻辩,到底是詐尸還是另有隱情,我是刑警寧澤拆祈,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布微猖,位于F島的核電站,受9級特大地震影響缘屹,放射性物質發(fā)生泄漏。R本人自食惡果不足惜侠仇,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一轻姿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧逻炊,春花似錦互亮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至桨吊,卻和暖如春威根,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背视乐。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工洛搀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人佑淀。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓留美,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子谎砾,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內容