久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

Jacoco 和單元測試代碼覆蓋率與 android-gradle-plugi

Jacoco and Unit Tests Code Coverage with android-gradle-plugin gt;= 1.1(Jacoco 和單元測試代碼覆蓋率與 android-gradle-plugin = 1.1)
本文介紹了Jacoco 和單元測試代碼覆蓋率與 android-gradle-plugin >= 1.1的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我最近開始在我的一個項目中集成 android-gradle-plugin 1.1.0.該項目使用 robolectric 2.4 來運行單元測試.

I recently started integrating android-gradle-plugin 1.1.0 in one of my projects. The project uses robolectric 2.4 to run unit tests.

這是一個多模塊項目,具有非常復雜的依賴關系(一些模塊依賴于其他模塊).類似的東西:

It's a multi module project with very complex dependencies (Some modules depend on other modules). Something like that:

--> application-module (dependsOn: module1, module2, module-core)
    --> module1 (dependsOn: module-core)
    --> module2 (dependsOn: module-core)
    --> module-core (dependsOn: module3, module4)
        --> module3 (library dependencies)
        --> module4 (library dependencies)

如需更清晰的圖片,請參閱 jacoco-example 項目.

For a more cleared picture please see jacoco-example project.

我試圖集成 JaCoCo 來為單元測試生成報告,但在我看來它只運行 androidTests 基本上是儀器測試.

I tried to integrate JaCoCo to generate reports for the unit tests, but it seems to me that it runs only androidTests which are basically instrumentation tests.

經過一些谷歌搜索后,我在 GitHub 和其他文章上遇到了一些項目,但它們主要集中在以前版本的 android-gradle-plugin 或正在使用其他第三方android-unit-test 例如這里這樣的插件.

After some google'ing I've come across a few projects on GitHub and other articles, but they mainly are focused on previous versions of the android-gradle-plugin or are using other third party plugins like android-unit-test for example here.

可能是我失去了使用谷歌搜索的能力.但是有人可以指出我可以找到一些關于 android gradle 插件中的新內容以及如何僅針對單元測試運行 jacoco 任務的文檔的方向嗎?

May be I've lost my ability to google. But can somebody point me in a direction where I can find some documentations regarding the new stuff in android gradle plugin and how to run the jacoco task only for unit tests?

更新

采用 nenick 的例子的腳本:

apply plugin: "jacoco"

configurations {
    jacocoReport
}

task jacocoReport(dependsOn: 'testDebug') << {
    ant {
        taskdef(name:'jacocoreport',
                classname: 'org.jacoco.ant.ReportTask',
                classpath: configurations.jacocoReport.asPath)

        mkdir dir: "${buildDir}/test-coverage-report"
        mkdir dir: "${buildDir}/reports/jacoco/test/"

        jacocoreport {
            executiondata = files("${buildDir}/jacoco/testDebug.exec")

            structure(name: "${rootProject.name}") {
                classfiles {
                    fileset (dir: "${buildDir}/intermediates/classes/debug") {
                        //exclude(name: '**/*_*.class')
                        exclude(name: '**/R.class')
                        exclude(name: '**/R$*.class')
                        exclude(name: '**/BuildConfig.class')
                    }
                }

                sourcefiles {
                    fileset dir: "src/main/java"
                    fileset dir: "${buildDir}/generated/source/buildConfig/debug"
                    fileset dir: "${buildDir}/generated/source/r/debug"
                }
            }

            xml destfile: "${buildDir}/reports/jacoco/test/jacocoTestReport.xml"
            html destdir: "${buildDir}/test-coverage-report/"
        }
    }
}

dependencies {
    jacocoReport 'org.jacoco:org.jacoco.ant:0.7.2.201409121644'
}

之后,./gradlew jacocoReport 執行并生成報告,但它顯示 0(零)測試覆蓋率,這是不可能的,因為至少有一半的類都經過測試.

After that the ./gradlew jacocoReport executes and generates the report, but it shows 0 (zero) test coverage, which is impossible because at least half of all classes are tested.

UPDATE_2

試用了這個示例.將下一個任務添加到我的一個 gradle 構建文件中:

Tried out this example. Adding the next task to one of my gradle build files:

task jacocoTestReport(type:JacocoReport, dependsOn: "testDebug") {
    group = "Reporting"
    description = "Generate Jacoco coverage reports"

    classDirectories = fileTree(
            dir: "${buildDir}/intermediates/classes/debug",
            excludes: ['**/R.class',
                       '**/R$*.class',
                       '**/*$ViewInjector*.*',
                       '**/BuildConfig.*',
                       '**/Manifest*.*']
    )

    sourceDirectories = files("${buildDir.parent}/src/main/java")
    additionalSourceDirs = files([
            "${buildDir}/generated/source/buildConfig/debug",
            "${buildDir}/generated/source/r/debug"
    ])
    executionData = files("${buildDir}/jacoco/testDebug.exec")

    reports {
        xml.enabled = true
        html.enabled = true
    }
}

同樣的問題,生成了報告,但代碼覆蓋率仍然為零.

Same issue, the reports are generated, but the code coverage is still zero.

UPDATE_3

UPDATE_2 中的任務似乎有效,但僅適用于帶有 apply plugin: 'com.android.application' 的模塊(報告正確生成).但是對于 android 庫模塊(apply plugin: 'com.android.library'),報告顯示零覆蓋率,盡管模塊包含的測試比應用程序模塊多.

It seams that the task from UPDATE_2 worked but only for the module with apply plugin: 'com.android.application' (The reports a generated correctly). But for modules that are android libraries (apply plugin: 'com.android.library') the reports show zero coverage, although the modules contain more tests then the application module.

UPDATE_4

創建了一個簡單的示例項目來演示我的問題.目前,如果您運行 ./gradlew jacocoReport 會生成報告,但不會顯示模塊項目的測試覆蓋率.請參閱此 鏈接

Created a simple example project that demonstrates my issue. Currently if you run ./gradlew jacocoReport the report is generated, but no test coverage is displayed for the module projects. See this link

簡短說明:當測試是 AndroidUnitTests(白化 JUnit 4 和 Robolectric)時,JaCoCo 報告顯示了所有模塊的覆蓋范圍.

Short note: When the tests were AndroidUnitTests (whiteout JUnit 4 and Robolectric) JaCoCo reports showed coverage for all the modules.

有什么想法嗎?

推薦答案

經過一番折騰,我決定創建一個 開源 Gradle 插件 .

After the hassle, I decided to create an open source Gradle plugin for that.

根 build.gradle

buildscript {
    repositories {
        mavenCentral() // optional if you have this one already
    }
    dependencies {
        classpath 'com.vanniktech:gradle-android-junit-jacoco-plugin:0.16.0'
    }
}

apply plugin: 'com.vanniktech.android.junit.jacoco'

然后直接執行

./gradlew jacocoTestReportDebug

它將在調試模式下運行 JUnit 測試,然后在相應的構建目錄中以 XML 和 HTML 形式為您提供 Jacoco 輸出.

It'll run the JUnit tests in Debug Mode and then give you the Jacoco output in XML and HTML form in the corresponding build directory.

它還支持風味.將創建紅色和藍色 2 種口味的任務

It also supports flavors. Having 2 flavors red and blue those tasks would be created

  • jacocoTestReportRedDebug
  • jacocoTestReportBlueDebug
  • jacocoTestReportRedRelease
  • jacocoTestReportBlueRelease

這篇關于Jacoco 和單元測試代碼覆蓋率與 android-gradle-plugin >= 1.1的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

IncompatibleClassChangeError after updating to Android Build Tools 25.1.6 GCM / FCM(更新到 Android Build Tools 25.1.6 GCM/FCM 后出現 IncompatibleClassChangeError)
How to get current flavor in gradle(如何在 gradle 中獲取當前風味)
How to fix quot;unexpected element lt;queriesgt; found in lt;manifestgt;quot; error?(如何修復“意外元素lt;查詢gt;在“清單中找到錯誤?)
Multi flavor app based on multi flavor library in Android Gradle(基于 Android Gradle 中多風味庫的多風味應用)
Android dependency has different version for the compile and runtime(Android 依賴在編譯和運行時有不同的版本)
Transitive dependencies for local aar library(本地 aar 庫的傳遞依賴)
主站蜘蛛池模板: 欧美一级在线观看 | 一区二区三区四区电影视频在线观看 | 蜜桃av鲁一鲁一鲁一鲁 | 亚洲国产小视频 | 欧美日韩中文字幕在线 | 玖玖免费 | 国产精品一区二区久久 | www.天堂av.com | 久久国产精品久久久久久 | 成人av一区 | 狠狠躁18三区二区一区 | 日日操天天射 | 欧美成人一区二区三区 | 98久久| 亚洲黄色av网站 | 91精品国模一区二区三区 | 婷婷在线免费 | 久久久www成人免费精品 | 国产精品久久久久久久久久免费看 | 免费久久视频 | 久久久久久久久91 | 精品国产视频 | 久久精品亚洲 | 天天av综合| 久久精品福利 | 欧美日韩久久 | 久久99精品久久久久久国产越南 | 九一精品| 99精品久久久 | 久久亚洲欧美日韩精品专区 | 日韩欧美字幕 | 欧美在线视频一区二区 | 久久久精品影院 | 欧美xxxx黑人又粗又长 | 美女天天干 | 欧美视频 亚洲视频 | 中文字幕在线一区 | www.色五月.com | 99精品欧美一区二区三区 | 激情五月综合 | 91 在线|