簡體   English   中英

結合androidTest的jacoco覆蓋並測試

[英]Combine jacoco coverage from androidTest and test

自從'com.android.tools.build:gradle:1.1.0'發布以來,我將大部分java測試代碼從androidTesttest文件夾,因為JVM測試速度要快得多。 但我不能移動所有測試。 我真的需要設備測試,因為有一些ContentProvider東西。

在開始遷移之前,我已經有100%的代碼覆蓋率。 當我正在運行jacoco代碼覆蓋時,我獲得androidTest文件夾的40%和test文件夾的71%。 我的代碼經過100%測試,但我沒有報告證明這一點。

有沒有辦法將兩份報告合並? 我找到了JacocoMerge,但無法讓它工作。

這是androidTest文件夾的輸出: build/outputs/reports/coverage/debug/index.html

這里是使用此gradle任務生成的test文件夾build/reports/jacoco/generateJacocoTestReports/html/index.html輸出:

def coverageSourceDirs = [
        '../library/src/main/java'
]

task generateJacocoTestReports(type: JacocoReport, dependsOn: "test") {
    group = "Reporting"
    description = 'Generate Jacoco Robolectric unit test coverage reports'

    classDirectories = fileTree(
            dir: '../library/build/intermediates/classes/debug',
            excludes: ['**//*R.class',
                       '**//*R$*.class',
                       '***/*//*$ViewInjector*.*',
                       '**//*BuildConfig.*',
                       '**//*Manifest*.*']
            )
    sourceDirectories = files(coverageSourceDirs)
    additionalSourceDirs = files(coverageSourceDirs)
    executionData = files('../library/build/jacoco/testDebug.exec')
}

不確定你是否仍然需要這個,但我最近發布了Gradle插件,它可以幫助你: https//github.com/paveldudka/JacocoEverywhere

還有gradle插件https://github.com/palantir/gradle-jacoco-coverage ,根據文檔也可以完成這項工作。

我沒有嘗試過一個具有兩個不同測試部件的子模塊,但它適用於將兩個子模塊的測試部件合並。

請參閱Gradle jacoco覆蓋率報告,其中包含多個子模塊? 詳情

如果您將Jenkins與JaCoCo插件一起使用,您只需配置“執行文件路徑”中的所有jacoco.exec和emma.ec文件即可報告組合覆蓋率。

connectedAndroidTest默認會在“輸出”中的某處產生emma.ec文件。

JacocoMerge任務可用於合並2個或更多jacoco執行數據。

可以將以下任務添加到根gradle文件中,並且在成功執行此任務時,可以在根構建目錄下找到合並的執行數據。 build / jacoco / mergeJacocoReport.exec

evaluationDependsOnChildren()
//Missing this might be a problem in fetching JacocoReport tasks from sub-modules.

 task mergeJacocoReport(type: org.gradle.testing.jacoco.tasks.JacocoMerge) {
    group "Jacoco Report"
    description "Merge Jacoco Code Coverage Report"

    def executionFiles = fileTree("$rootProject.rootDir", {
        includes = ['**/*.exec']
    })

    setExecutionData(executionFiles)

}

subprojects.each { $project ->
    def tasks = $project.tasks.withType(JacocoReport)

    if (tasks != null) {
        mergeJacocoReport.dependsOn << tasks
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM