I am trying to get code coverage working for a new empty Android project using Gradle in Android Studio.
I managed to get Sonar working but I can't seem to figure it out for the code coverage. (never done anything like it before)
I have looked at JaCoCo but it is not compatible with Android. The same goes for Cobertura. And it seems Emma doesn't work with Gradle yet.
I am using Gradle 1.11, Android Studio 0.5.1 and Sonar Runner 2.3
JaCoCo is now supported in Android Studio when using build tools version 0.10.0
New Build System
Release Notes:
0.10.0
....
Test code coverage support with Jacoco
Enable in the tested Build Type with testCoverageEnabled = true
HTML and XML Report generated in build/reports/coverage
Configure version of Jacoco with
android {
jacoco {
version = '0.6.2.201302030002'
}
}
Known issue: This is not compatible with using Dagger.
.....
Please refer to this answer. https://stackoverflow.com/a/25029501/973483
You should be able to use jacoco and enable code coverage on android project as long as you are using Java version 1.5. It should work with mockito, dagger and espresso.
If you, however, switch to Java 1.6 or above, you will have issues enabling code coverage
Related
So, I was trying to use fragment testing library androidx.fragment:fragment-testing:1.2.4 in a dynamic feature module. When I used Android Gradle Plugin (AGP) version 3.6.3, it failed to build with an error
AAPT: error: resource style/FragmentScenarioEmptyFragmentActivityTheme (aka com.example.reminder.test:style/FragmentScenarioEmptyFragmentActivityTheme) not found.
And so I was curious and checkout the codelab github and try to upgrade the AGP on that project to 3.6.3 and it can build successfully. But the codelab does not use Dynamic Features.
So I tried to actually run a fragment test in my app module only (excluding the dynamic features module) and yes it can build successfully too.
But I still need to test my fragment in the dynamic features module, so I tried playing with the version one by one and then when I downgrade the AGP version to 3.4.1 it can build successfully.
And I found out that since AGP version 3.5.0 and above, it just failed to build with the same error above.
So,
AGP 3.5.0 and above:
- Building test on app module only -> works
- Building test on dynamic features -> failed to build
AGP 3.4.2 and below:
- Building test on app module only -> works
- Building test with dynamic features -> works
But I still want to use AGP 3.6.0 because I want to utilise viewBinding.
So does anyone know how to resolve the error above for fragment testing with dynamic features module?
Upgrading AGP to 4.0.0 and above should resolve the issue.
I've got a problem when I launch a build on Jenkins. I would like to have the coverage report of my instrumented tests in Jenkins but it fails due to an incompatible version of Jacoco.
In my Android project, I've added the line apply plugin: 'jacoco' in the app/build.gradle file.
My Android project use the gradle plugin 3.0.1 version.
In Jenkins, I set up my application like this:
In Jenkins, I've installed the JaCoCo plugin 3.0.1 version.
When I run a build in Jenkins with this configuration, it goes well but I don't get the coverage report of the instrumented tests.
So, I change the settings like this:
When I run a build, in the Console output, I get the following message:
ERROR: Step ‘Record JaCoCo coverage report’ aborted due to exception:
org.jacoco.core.data.IncompatibleExecDataVersionException: Cannot read execution data version 0x1006. This version of JaCoCo uses execution data version 0x1007.
On the Jenkins wiki, I read that there is a compatibility problem between different versions of Jenkins and JaCoCo: https://wiki.jenkins.io/display/JENKINS/JaCoCo+Plugin.
So, I tried to use a 7.5+ version in my Android project by adding this line in the build.gradle file:
jacoco {
toolVersion '0.7.5+'
}
But it still fails... :-(
I don't understand why it works with the *.exec files only but not when I add the *.ec files.
Someone see what I missed?
I'm using JaCoCo plugin for code coverage in my Android project. When I open sonar it shows me that following line isn't covered.
I'm using SonarQube Version 4.5.1 and JaCoCo Gradle plugin 0.7.1.201405082137.
Is this a bug in JaCoCo plugin? How can I fix it?
Edit: reported to Gradle forum.
Very strange, but if I change code style, then everything is fine.
I'll report this to Gradle community.
I'm trying to generate a Code Coverage report using Android Studio and the gradle plugin.
I've done alot of research and seem to have found that using the jacoco plugin is the way to do it. I currently only have instrumentation and junit tests which I run with the gradle wrapper using gradle 1.13 that I execute with ./gradlew connectedCheck.
The appropriate part of my gradle file looks like this:
mock.initWith(debug)
mock {
testCoverageEnabled true
}
Upon doing so it generates a coverage.ec file that I have no idea what to do with. Apparently you need a coverage.em file for emma to compile it but I'm not sure where to generate that.
I've also tried this without a gradle wrapper using gradle 2.2.1
According to http://gradle.org/docs/current/userguide/jacoco_plugin.html#jacoco-application-output it should be generating an html file with the coverage report in it but I am unable to do so. Does anyone have any great tutorials or a way to use the coverage.ec file?
Is there a way to to have a gradle build that will generate code coverage from robolectric test that can be sent to sonar?
As far as I can tell: At this time, No.
In order to have code coverage you need Emma support and that's not yet fixed in the android gradle build plugin. It's supposed to come in version 0.8.+ but it was also "supposed" to come in version 0.6+ so don't hold your breath.
Roadmap: http://tools.android.com/tech-docs/new-build-system/roadmap
Related Emma Issue: https://code.google.com/p/android/issues/detail?id=60964