Search code examples
androidkotlinsonarqubejunit5

SonarQube not finding Kotlin Junit5 tests


I'm trying to set up a sample android studio project in Github which integrates also its CI connected to SonarQube.

I'm having problems with sonarQube due to it says there is no test coverage applied. However there is, in kotlin and with Juni5, but there is no way to set sonar.tests for recognizing it.

this it the sonar-project.properties

enter image description here

test are run fine either locally and in the CI when a branch of the project is build.

Also I've added this

enter image description here

Gradle has been written with Kotlin-DSL.


Solution

  • if you are using gradle there is no need to define the sources and the tests in the sonar-project.properties. The gradle sonarqube task will pick them up automatically based on your sourcesets.

    What i think you are missing is a tool to generate the coverage, sonarqube will not generate coverage data for you. SonarQube utilizes in Java eg. JaCoCo so you also need to apply a plugin for that.

    so your build gradle (behold this is groovy dsl, but i will provide a link to one in kotlin) will look something like the following code snippet. This will generate everything automatically

    plugins {
        id 'java'
        id 'jacoco'
        id 'eclipse' // optional (to generate Eclipse project files)
        id 'idea' // optional (to generate IntelliJ IDEA project files)
        id "org.sonarqube" version "2.8"
    }
    
    repositories {
        jcenter()
    }
    
    dependencies {
        testImplementation('org.junit.jupiter:junit-jupiter:5.6.0')
    }
    
    test {
        useJUnitPlatform()
        testLogging {
            events "passed", "skipped", "failed"
        }
    }
    
    sonarqube {
        properties {
            /*
            UPDATE SECTION START
            Please fill in your data
             */
            property "sonar.projectName", "SonarCloud Github Actions with gradle"
            property "sonar.projectKey", "aepfli_SonarCloud-GitHubActions-Gradle-example"
            property "sonar.organization", "aepfli"
            /*
            UPDATE SECTION END
             */
            property "sonar.host.url", "https://sonarcloud.io"
    
        }
    }
    
    jacocoTestReport {
        reports {
            xml.enabled = true
        }
    }
    

    Alternatively if you are looking for an example in kotlin DSL, i can recommend this one from JUnit Pioneer.

    I am still not sure how good the support for kotlin is with JaCoCo. if there is a different tool like JaCoCo in the Kotlin world, you can also try to generate and XML report and provide this xml report via property sonar.coverage.jacoco.xmlReportPaths base on Sonarqube doc