android jacoco coverage shows 0% with gradle however there are 95% tests covering code

烈酒焚心 提交于 2019-12-20 04:50:49

问题


I'm trying to get jacoco create a code coverage report for my android test project.

Gradle version classpath 'com.android.tools.build:gradle:2.0.0'

I have the following in build.gradle:

apply plugin: 'com.android.application'
apply plugin: 'jacoco'

jacoco {
    toolVersion = "0.7.1.201405082137"
}

android {
    buildTypes {
        release {
        }
        debug {
            testCoverageEnabled true
        }
    }
}

It shows report as below image

There is almost 95% of the code coverage (When I ran the same report in 2015 it showed the report as 95%). Nothing much changed in the code and the test folders ever since then. So ideally it should show coverage as something like this

I tried running report with both JDK7 & 8 but same result. Also tried changing to latest versions of JaCoCo, but still same result.

Any ideas why the report is shown as 0% coverage? While running the Gradle task it runs my tests in androidTest folder successfully though.

Facing same issue as mentioned in this question - This question is unanswered yet


回答1:


Generation of coverage for your project using command

./gradlew clean createDebugCoverageReport

works just fine:

The only thing that I changed - is compileSdkVersion from 23 to 25 and buildToolsVersion from 23.0.1 to 25.0.2, because this is the versions that I have.




回答2:


I had the exact same problem. But using the comment from Guna (27 Feb 2017), it seems that the problem is caused by running the coverage tests on some Samsung devices.

  • On some newer Samsung devices, when you run the Jacoco gradle task createDebugCoverageReport or createDebugAndroidTestCoverageReport, it will run the unit tests, but show 0% coverage.

  • But on a Google Nexus 5 or most emulators, when you run the same Jacoco task, it will work fine and show the correct coverage. Older Samsung devices also work well.

It's very odd.

Also remember to ensure that all your tests pass first. This is another limitation of Jacoco, because even if one small test fails in your whole suite, it will not generate a test coverage report. Another note: Your app may be automatically uninstalled when the coverage report is generated. Unknown reason why - you'll just have to reinstall it.

Update, 11 October 2018: There is a way to generate a coverage report even if an individual test fails. Use this in your app/build.gradle (from here):

buildTypes {
    debug {
        testCoverageEnabled = true
    }
}

project.gradle.taskGraph.whenReady {
    connectedDebugAndroidTest {
        ignoreFailures = true
    }
}

Automated build scripts may need to use the "--continue" flag, to ensure a unit test failure will continue the gradle task; something like this:

./gradlew createDebugCoverageReport --continue

Further info, see also:

  • https://web.archive.org/web/20171210224809/http://blog.wittchen.biz.pl/test-coverage-report-for-android-application (also view the user comments)
  • http://wittchen.io/test-coverage-in-android-applications/ (same article as above, but without the user comments)
  • Ignore Gradle Build Failure and continue build script?
  • http://mrhaki.blogspot.com/2014/12/gradle-goodness-continue-build-even.html


来源:https://stackoverflow.com/questions/42451660/android-jacoco-coverage-shows-0-with-gradle-however-there-are-95-tests-coverin

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!