Android将单元测试覆盖率添加到声纳中

时间:2016-02-13 22:42:33

标签: android unit-testing sonarqube android-gradle build.gradle

我有Sonar分析的Android项目。我看到了所有问题但没有通过单元测试覆盖。我尝试了很多东西,但仍然无法使其正常工作。当我调用'gradlew createDebugCoverageReport'时,它将在build / reports / coverage / debug中创建包含大量文件(如report.xml和index.html)的目录,其中包含测试覆盖率数据。但在Coars的Coverage下,我得到的信息是“此组件没有覆盖详细信息”。我怎样才能让它发挥作用?

命令序列:

gradlew clean assemble
gradlew createDebugCoverageReport
gradlew sonarRunner

的build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "cz.meteocar.unit"
        minSdkVersion 16
        targetSdkVersion 20
        versionCode 3
        versionName "1.0.2"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

            }
            debug {
                debuggable true
                testCoverageEnabled = true
            }


        }
    }


apply plugin: 'sonar-runner'

sonarRunner {
      sonarProperties {
        property "sonar.host.url", "http://localhost:9000" // Address of Sonar         server
        property "sonar.sources", "src/main/java" // Sources
        property "sonar.projectName", "Meteocar" // Name of your project
        property "sonar.projectVersion", "1.0.2" // Version of your project
        property "sonar.projectDescription", "Sonar" // Description of your project
        property "sonar.junit.reportsPath", "build/reports/coverage/"
    }
}



dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile files('libs/mbassador-1.2.0.jar')
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile 'com.android.support:support-v4:20.0.0'
    compile 'org.apache.commons:commons-lang3:3.0'
    compile 'com.jjoe64:graphview:4.0.1'
    testCompile 'junit:junit:4.12'
    testCompile 'org.mockito:mockito-core:1.9.5'
    testCompile 'org.powermock:powermock-api-mockito:1.6.1'
    testCompile 'org.powermock:powermock-module-junit4-rule-agent:1.6.1'
    testCompile 'org.powermock:powermock-module-junit4-rule:1.6.1'
    testCompile 'org.powermock:powermock-module-junit4:1.6.1'
    testCompile 'org.json:json:20140107'
}

1 个答案:

答案 0 :(得分:5)

您可以使用Jacoco获取覆盖率结果。它适用于sonar

1.在Android

上安装SonarQube插件

2.添加jacoco plugin并在gradle task上创建Gradle以生成coverage个文件,如:

apply plugin: 'jacoco'

jacoco {
    version "0.7.1.201405082137"
}

task jacocoTestReport(type: JacocoReport, dependsOn: "testDebugUnitTest") {
    group = "Reporting"
    description = "Generate Jacoco coverage reports after running tests."
    reports {
        xml.enabled = true
        html.enabled = true
    }
    classDirectories = fileTree(
            dir: 'build/intermediates/classes/debug/com/yourapppackagename',
            excludes: ['**/R.class',
                       '**/R$*.class',
                       '**/BuildConfig.*',
                       '**/Manifest*.*'])
    sourceDirectories = files('src/main/java')
    executionData = files('build/jacoco/testDebugUnitTest.exec')
    doFirst {
        files('build/intermediates/classes/debug').getFiles().each { file ->
            if (file.name.contains('$$')) {
                file.renameTo(file.path.replace('$$', '$'))
            }
        }
    }
}

3.在根目录上创建sonar.properties文件并包含覆盖文件路径:

sonar.jacoco.reportPath=sdk/build/jacoco/testDebugUnitTest.exec
sonar.junit.reportsPath=sdk/build/test-results/debug

4.Run jacoco gradle task

 ./gradlew clean assembleDebug jacocoTestReport

5.Run sonar analyses

相关问题