Попытка получить покрытие кода на моих тестах Robolectric в Android с использованием Jacoco, но он просто отказывается признать мои тесты Robolectric при создании отчетов.Android - покрытие кода Jacoco игнорирует Robolectric тесты
Мой jacoco.gradle файл выглядит следующим образом:
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
}
}
}
}
С помощью этой установки я могу получить отчеты Coverage, но я получаю покрытие 0%, несмотря на Robolectric тесты в "SRC/тест/Java".
Если добавить следующий код в этот файл:
android {
testOptions {
unitTests.all {
jacoco {
includeNoLocationClasses = true
}
}
}
}
я получаю следующее сообщение об ошибке, когда Gradle пытается синхронизировать:
Error:No such property: includeNoLocationClasses for class: org.gradle.testing.jacoco.plugins.JacocoTaskExtension_Decorated
Я знаю, что мне нужно иметь Gradle 2.13 до использовать это значение includeNoLocationClasses так в graddle-wrapper.properties я следующее:
#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
Я довольно уверен, что я бегу Gradle 2.13 с плагином Android 1.5
В моих программах Gradle файл я следующее:
//...
apply from: 'jacoco.gradle'
//..
testOptions {
unitTests.returnDefaultValues = true
}
//...
debug {
testCoverageEnabled true
}
И команды я использую для запуска покрытия является:
./gradlew createDebugCoverageReport
Так что мне интересно, почему я получаю ошибку includeNoLocationClasses, несмотря на использование правильной версии Gradle? И за пределами этого, может быть, я что-то делаю неправильно, когда Якоко не собирает тесты Robolectric в src/test.java?
Я заметил, что этот код в настоящее время не рекомендуется (в Gradle-андроид-плагин 3.x): андроид { testOptions { unitTests.all { jacoco { includeNoLocationClasses = истинные }} }} – Alix
Донал, небольшая помощь. Пока я пытаюсь выполнить конфигурацию, о которой вы говорили, я получаю. ** «Ошибка: не удалось получить неизвестное свойство« android »для корневого проекта« MyProject »типа org.gradle.api.Project.» ** Любая идея, почему! – CoDe
Извините @CoDe Я не помню, и код, над которым я работал, был отложен. Если я смогу вспомнить, я дам вам знать. –