Jacoco 0% покрытие кода

Мое покрытие кода в Sonar показывает 0%, что не соответствует действительности, поскольку у меня есть модульные тесты.

Грейдл

sonarqube {
  properties {
    property "sonar.binaries", "build/intermediates/classes/release"
    property "sonar.java.binaries", "build/intermediates/classes/release"
    property "sonar.java.test.binaries", "build/intermediates/classes/test/release"
    property "sonar.sources", "src"
    property "sonar.junit.reportsPath", "build/reports/tests/release"
    property "sonar.java.junit.reportsPath", "build/reports/tests/release"
    property "sonar.android.lint.report", "build/outputs/lint-results.xml"
    property "sonar.jacoco.reportPath", "${project.buildDir}/jacoco/testReleaseUnitTest.exec"
  }
}

Когда я открываю index.html внутри build/reports/tests/release, я могу увидеть успешные модульные тесты.

Я запускаю sonarqube как gradle task в своей среде Jenkins. Мой экземпляр SonarQube показывает Code Smells и все, кроме code coverage, он показывает 0%.

Обновить

Я получаю index.html, созданный для покрытия кода, но все это также показывает 0%:

app/build/reports/jacoco/jacocoTestDebugUnitTestReport/html/index.html

Обновить

Все еще получаю 0%, но это то, что у меня есть до сих пор:

android {
    ...
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            testCoverageEnabled true
        }
        debug {
            testCoverageEnabled true
        }
    }

    jacoco {
        version "0.7.8.201607051106"
    }
}

person Subby    schedule 08.07.2016    source источник


Ответы (2)


Выдержка из документации SonarQube:

Плагин Java повторно использует отчеты; он их не генерирует. Поэтому, прежде чем пытаться настроить свой анализ для импорта этих отчетов, убедитесь, что они правильно сгенерированы и не пусты.

Поскольку вы, похоже, не используете плагин Gradle Jacoco, SonarQube, вероятно, сообщая, что 0%, потому что вы не создали отчет. Вам нужно будет добавить Jacoco в свою сборку и убедиться, что вы передали SonarQube путь к сгенерированному отчету (sonar.jacoco.reportPath), чтобы он мог его прочитать.

Чтобы добавить Jacoco в свой проект, вам нужно добавить в build.gradle следующее:

//...
apply plugin: "jacoco"
//...
jacoco {
    toolVersion = "0.7.6.201602180812"
    //Note: unless "reportsDir" is set here, default is “$buildDir/reports/jacoco”
}

Вам также необходимо будет убедиться в следующем: Прежде всего, вам необходимо убедиться, что задача jacocoTestReport выполняется (либо путем добавления ее в задачи самостоятельно, либо путем добавления задачи в ваш вызов gradle). Во-вторых, вам нужно убедиться, что SonarQube ищет отчет о тестировании в правильном месте, установив sonar.jacoco.reportPath так, чтобы он указывал на ваш каталог /reports/jacoco (по умолчанию это target/jacoco.exec, поэтому он не найдет отчет с настройками по умолчанию).

person Brandon McKenzie    schedule 08.07.2016
comment
Не могли бы вы привести пример того, что именно вы подразумеваете под добавлением Jacoco в свою сборку, пожалуйста? - person Subby; 10.07.2016
comment
Добавлен скрипт сборки и детали SonarQube для ответа. - person Brandon McKenzie; 11.07.2016
comment
stackoverflow .com/questions/18106492/ - person Pavan; 11.07.2016

Я устранил проблему с помощью этого плагина. Проблема, как я вижу, заключалась в том, что Jacoco пытался искать инструментальные тесты androidTests, а не модульные тесты tests. Плагин, который я использовал, позаботился о том, чтобы он запускал тесты заранее, создавал отчет на основе тестов и заставлял Jacoco указывать на эти тесты.

person Subby    schedule 11.07.2016