Cercando di ottenere la copertura del codice sui miei test Robolectric in Android utilizzando Jacoco, ma semplicemente rifiuta di riconoscere i miei test Robolectric durante la creazione dei report.Android - La copertura del codice Jacoco ignora i test di Robolectric
Il mio file jacoco.gradle è la seguente:
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
}
}
}
}
Con questa impostazione posso ottenere i rapporti di copertura, ma io ottenere una copertura 0% pur avendo le prove Robolectric in "src/test/java".
Se posso aggiungere nel codice seguente al file:
android {
testOptions {
unitTests.all {
jacoco {
includeNoLocationClasses = true
}
}
}
}
ottengo il seguente errore quando Gradle cerca di sincronizzare:
Error:No such property: includeNoLocationClasses for class: org.gradle.testing.jacoco.plugins.JacocoTaskExtension_Decorated
so che ho bisogno di avere Gradle 2.13 a utilizzare questo valore includeNoLocationClasses così in graddle-wrapper.properties ho il seguente:
#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
Sono abbastanza certo Sto facendo funzionare Gradle 2.13 con la versione plug-in Android 1.5
Nelle mie applicazioni di file Gradle Ho il seguente:
//...
apply from: 'jacoco.gradle'
//..
testOptions {
unitTests.returnDefaultValues = true
}
//...
debug {
testCoverageEnabled true
}
E il comando che uso per eseguire la copertura è:
./gradlew createDebugCoverageReport
Quindi mi chiedo perché ottengo l'errore includeNoLocationClasses nonostante utilizzi la versione Gradle corretta? E al di fuori di questo forse sto facendo qualcosa di sbagliato dove Jacoco non sta raccogliendo i test di Robolectric in src/test.java?
ho notato che questo codice è ora deprecato (in Gradle-android-plugin 3.x): Android {{ testOptions unitTests.all {{ jacoco includeNoLocationClasses = true }} }} – Alix
Donal, un piccolo aiuto. Mentre sto cercando di eseguire il configure che hai detto che sto ricevendo. ** "Errore: impossibile ottenere la proprietà sconosciuta 'android' per il progetto root 'MyProject' di tipo org.gradle.api.Project." ** Qualche idea sul perché !! – CoDe
Mi dispiace @CoDe Non riesco a ricordare, e il codice su cui stavo lavorando per questo è stato accantonato. Se riesco a ricordare ti farò sapere. –