I have a simple android project with test cases.
ProjNameProject
--build.gradle
--ProjName
----build.gradle
I see that by default android's new build system provides basic test results by default. (Hooray!)
Now I want to see code coverage as well. I know how to set this up using Emma and Ant scripts, however I don't want to run Ant scripts here. I feel that would defeat the purpose of me using the new build system.
I've tried a few Cobertura plugins that were found on Github. One in particular: https://github.com/stevesaliman/gradle-cobertura-plugin
However if I try to use the plugin in the ProjName
build file then I get errors about the java
plugin. I read on tools.android.com that adding the java
plugin will generate this behavior. I'm not applying it so the cobertura plugin must be.
If I try to use the plugin in the main build file then I don't see the java errors but now i see:
Could not find net.sourceforge.cobertura:cobertura:1.9.4.1.
Required by:
:ProjNameProject:unspecified
What do I do??
Getting Started To get started, apply the JaCoCo plugin to the project you want to calculate code coverage for. If the Java plugin is also applied to your project, a new task named jacocoTestReport is created. By default, a HTML report is generated at $buildDir/reports/jacoco/test .
Android Studio has a built-in feature that allows you to run tests with code coverage. Simply navigate to the src/test/java folder and right click. Then select Run 'Tests in 'java'' with Coverage (awkward use of single quotes theirs not mine).
JaCoCo support was added to the Android gradle plugin v0.10 (http://tools.android.com/tech-docs/new-build-system).
Enable in the tested Build Type with testCoverageEnabled = true
android {
jacoco {
version = '0.6.2.201302030002'
}
}
I was able to get JaCoCo coverage working with Robolectric by following http://chrisjenx.com/gradle-robolectric-jacoco-dagger/.
apply plugin: 'android'
apply plugin: 'robolectric'
apply plugin: 'jacoco'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile 'com.android.support:appcompat-v7:19.1.+'
androidTestCompile fileTree(dir: 'libs/test', include: '*.jar')
androidTestCompile 'junit:junit:4.11'
androidTestCompile 'org.robolectric:robolectric:2.3'
androidTestCompile 'com.squareup:fest-android:1.0.+'
}
robolectric {
// Configure the set of classes for JUnit tests
include '**/*Test.class'
exclude '**/*AbstractRobolectricTestCase.class'
// Configure max heap size of the test JVM
maxHeapSize = "2048m"
}
jacoco {
toolVersion = "0.7.1.201405082137"
}
//Define coverage source.
//If you have rs/aidl etc... add them here.
def coverageSourceDirs = [
'src/main/java',
'src/gen'
]
...
// Add JaCoCo test reporting to the test task
// http://chrisjenx.com/gradle-robolectric-jacoco-dagger/
task jacocoTestReport(type: JacocoReport, dependsOn: "testDebug") {
group = "Reporting"
description = "Generate Jacoco coverage reports after running tests."
reports {
xml.enabled = true
html.enabled = true
}
// Class R is used, but usage will not be covered, so ignore this class from report
classDirectories = fileTree(
dir: './build/intermediates/classes/debug',
excludes: ['**/R.class',
'**/R$*.class'
])
sourceDirectories = files(coverageSourceDirs)
executionData = files('build/jacoco/testDebug.exec')
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With