Покрытие кода Android Gradle

У меня есть простой проект Android с тестовыми примерами.

ProjNameProject
--build.gradle
--ProjName
----build.gradle

Я вижу, что по умолчанию новая система сборки Android по умолчанию предоставляет базовые результаты тестирования. (Ура!)

Теперь я хочу также увидеть покрытие кода. Я знаю, как настроить это с помощью сценариев Emma и Ant, однако я не хочу запускать сценарии Ant здесь. Я чувствую, что это помешает мне использовать новую систему сборки.

Я попробовал несколько плагинов Cobertura, которые были найдены на Github. В частности, один: https://github.com/stevesaliman/gradle-cobertura-plugin.

Однако, если я попытаюсь использовать плагин в файле сборки ProjName, я получу ошибки о плагине java. Я прочитал на tools.android.com, что добавление плагина java приведет к такому поведению. Я не применяю его, поэтому плагин cobertura должен быть.
Если я попытаюсь использовать плагин в основном файле сборки, я не увижу ошибок Java, но теперь я вижу:

Could not find net.sourceforge.cobertura:cobertura:1.9.4.1.
    Required by:
        :ProjNameProject:unspecified

Что я делаю??


person Sababado    schedule 14.06.2013    source источник
comment
Кто-нибудь пробовал использовать плагин Clover Gradle в проекте Android?   -  person SoH    schedule 29.01.2015
comment
возможный дубликат Как получить покрытие кода с помощью Android Studio?   -  person 030    schedule 01.03.2015
comment
Связанный вопрос был задан примерно через три месяца после моего... Так что на самом деле это потенциальный дубликат моего.   -  person Sababado    schedule 02.03.2015


Ответы (2)


Поддержка JaCoCo была добавлена ​​в подключаемый модуль Android gradle 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'
  }
}

Я смог получить информацию о работе JaCoCo с Robolectric, следуя 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')
}
person Paul T.    schedule 30.07.2014

Вскоре планируется реализовать поддержку Emma в рамках новой системы сборки Android: http://tools.android.com/tech-docs/new-build-system/roadmap

До сих пор нет официального способа запустить emma с Android через gradle. Я предполагаю, что инструментирование может быть достигнуто довольно легко, но тогда вы упустите способ сказать Android запускать тесты с включенным покрытием. Кроме того, в настоящее время нет способа (насколько мне известно) получить данные о покрытии emma во время выполнения с устройства.

Этот проект может вас заинтересовать: https://github.com/stephanenicolas/Quality-Tools-for-Android. Он будет обновлен, как только emma войдет в плагин Android Gradle.

----ОБНОВИТЬ

У этого плагина нет возможности работать с Android, так как он использует плагин Java, который несовместим с плагином Android.

person Snicolas    schedule 13.08.2013
comment
В то время как подключаемый модуль Emma для Gradle зависит от подключаемого модуля Java (и, следовательно, не работает с подключаемым модулем Android), плагин JaCoCo для Gradle не зависит от плагина Java и должно работать. - person sschuberth; 03.04.2014
comment
Вы можете найти пример сборки Gradle, оснащенной Jacoco, в упомянутом выше проекте QAT. Однако в прошлый раз, когда я пытался, регрессия мешала работе последней версии Jacoc, но это могло быть исправлено. - person Snicolas; 03.04.2014