简体   繁体   中英

Sonar Jacoco not considering Kotlin androidTest (integration test case) in coverage

I have local and integrated test cases written for my android project. Using Kotlin (1.4.21) Robolectric (4.5.1), sonar (2.7.1), Jacoco (maven plugin 0.8.2)

The problem is that the Sonar and Jacoco is not considering androidTest (integration test case) written in Kotlin for code coverage However sonar is showing correct coverage for other test cases like-

java unit test cases -> working

koltin unit test case -> working

java integrated test cases -> working

kotlin integrated test cases -> NOT WORKING

Although I have checked the paths I have set for sonar and it's all correct.

properties['sonar.java.binaries'] = files("${buildDir}/intermediates/javac/universalDebug/classes")
properties["sonar.java.binaries"] += files("${buildDir}/tmp/kotlin-classes/universalDebug/")

properties['sonar.java.test.binaries'] = files("${buildDir}/intermediates/javac/universalDebugAndroidTest/classes")
properties['sonar.java.test.binaries'] += files("${buildDir}/tmp/kotlin-classes/universalDebugAndroidTest/")

I have gone through other stackoverflow questions but didn't find same problem. So, I'm unable to find out the issue why sonar is not showing coverage for my integrated test cases written in Kotlin.

Thanks in Advance

You might need to do the following

tasks.withType(Test) {
    jacoco.includeNoLocationClasses = true
}

Note that there are some issues with Java 11 that might fail your tests so you might want to also exclude jdk.internal as follows

tasks.withType(Test) {
    jacoco.includeNoLocationClasses = true
    excludes = ['jdk.internal.*']
}

Or a little bit verbose option but works:

subprojects {
    pluginManager.withPlugin("com.android.library"){
        android.testOptions.unitTests.all {
            jacoco {
                includeNoLocationClasses = true
                excludes = ['jdk.internal.*']
            }
        }
    }
    pluginManager.withPlugin("com.android.application"){
        android.testOptions.unitTests.all {
            jacoco {
                includeNoLocationClasses = true
                excludes = ['jdk.internal.*']
            }
        }
    }
    apply plugin: 'jacoco'
}

I suggest you also upgrade your jacoco and sonar plugin versions if possible

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM