Ich versuche, Code Coverage auf meinen Robolectric Tests in Android mit Jacoco zu bekommen, aber es weigert sich einfach meine Robolectric Tests zu bestätigen, wenn ich die Berichte erstelle.Android - Jacoco Code Coverage ignoriert Robolectric Tests
Meine jacoco.gradle Datei ist wie folgt:
apply plugin: 'jacoco'
jacoco {
toolVersion = "0.7.6.201602180812"
}
project.afterEvaluate {
android.applicationVariants.all { variant ->
def name = variant.name
def testTaskName = "test${name.capitalize()}UnitTest"
tasks.create(name: "${testTaskName}Coverage", type: JacocoReport, dependsOn: "$testTaskName") {
group = "Reporting"
description = "Generate Jacoco coverage reports for the ${name.capitalize()} build."
classDirectories = fileTree(
dir: "${project.buildDir}/intermediates/classes/${name}",
excludes: ['**/R.class',
'**/R$*.class',
'**/*$ViewInjector*.*',
'**/*$ViewBinder*.*',
'**/BuildConfig.*',
'**/Manifest*.*']
)
sourceDirectories = files(['src/main/java'].plus(android.sourceSets[name].java.srcDirs))
executionData = files("${project.buildDir}/jacoco/${testTaskName}.exec")
reports {
xml.enabled = true
html.enabled = true
}
}
}
}
Mit diesem Setup ich Coverage Berichte erhalten können, aber ich bekomme 0% Deckung trotz Robolectric Tests mit in "src/test/java".
Wenn ich hinzufügen, in dem folgenden Code in diese Datei:
android {
testOptions {
unitTests.all {
jacoco {
includeNoLocationClasses = true
}
}
}
}
bekomme ich folgende Fehlermeldung, wenn Gradle zu synchronisieren versucht:
Error:No such property: includeNoLocationClasses for class: org.gradle.testing.jacoco.plugins.JacocoTaskExtension_Decorated
Ich weiß, dass ich muß Gradle 2,13 bis mit diesem Wert includeNoLocationClasses so in graddle-wrapper.properties ich habe folgendes:
#Wed Apr 10 15:27:10 PDT 2013
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions-snapshots/gradle-2.13-20160228000026+0000-all.zip
Ich bin mir ziemlich sicher, dass ich Gradle 2.13 Version mit Android-Plugin 1.5
In meiner apps Gradle Datei Ich habe folgendes leite:
//...
apply from: 'jacoco.gradle'
//..
testOptions {
unitTests.returnDefaultValues = true
}
//...
debug {
testCoverageEnabled true
}
Und der Befehl, den ich die Abdeckung laufen verwenden ist:
./gradlew createDebugCoverageReport
Also frage ich mich, warum bekomme ich den IncludeNoLocationClasses Fehler trotz der Verwendung der richtigen Gradle-Version? Und da mache ich vielleicht etwas falsch, wo Jacoco die Robolectric-Tests in src/test.java nicht aufnimmt?
ich, dass dieser Code bemerkt jetzt veraltet ist (in gradle-android-Plugin 3.x): android { testOptions { unitTests.all { jacoco { includeNoLocationClasses = true } } } } – Alix
Donal, ein wenig Hilfe. Während ich versuche, configure auszuführen, erwähnte ich, dass ich es verstehe. ** "Fehler: Die unbekannte Eigenschaft 'android' konnte für das Stammprojekt 'MyProject' vom Typ org.gradle.api.Project nicht gefunden werden." ** Irgendeine Idee warum !! – CoDe
Sorry @CoDe Ich kann mich nicht erinnern, und der Code, an dem ich gerade arbeitete, wurde zurückgestellt. Wenn ich mich erinnern kann, werde ich es Sie wissen lassen. –