0
votes

I have setup a kotlin multiplatform project and want to run junit tests.

But a

gradle clean build

just delivers:

Kotlin Multiplatform Projects are an experimental feature.

BUILD SUCCESSFUL in 1s
9 actionable tasks: 9 executed

this is my build.gradle:

buildscript {
    ext.kotlin_version = '1.4.0-rc'
}

plugins {
    id 'org.jetbrains.kotlin.multiplatform' version "$kotlin_version"
}

group 'org.example'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

kotlin {
    jvm {
        withJava()
    }

    sourceSets {
        commonMain {
            dependencies {
                implementation kotlin('stdlib-common')
            }
        }
        commonTest {
            dependencies {
                implementation kotlin('test-common')
                implementation kotlin('test-annotations-common')
            }
        }
        jvmMain {
            dependencies {
                implementation kotlin('stdlib-jdk8')
            }
        }
        jvmTest {
            dependencies {
                implementation kotlin('test')
                implementation kotlin('test-junit')
                implementation 'io.kotlintest:kotlintest-runner-junit5:3.3.2'
                implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
                implementation "org.junit.jupiter:junit-jupiter-engine:5.5.2"
                implementation "org.junit.jupiter:junit-jupiter-api:5.5.2"
                implementation "org.junit.jupiter:junit-jupiter-params:5.5.2"
            }
        }
    }
}

and this is my test (lies in src/jvmTest/kotlin):

import org.junit.jupiter.api.Test

class JvmTest {
    @Test
    fun testX() {
        println("Hello World")
        println("Hello World")
        println("Hello World")
        println("Hello World")
        println("Hello World")
    }
}

I would expect the outputs of Hello World, but as you can see, there is no output.

What do I have to change, that the test is executed? Or is it executed and the output is just not shown? What can I do, to see the output of the test?

I've also tried kotlin version 1.3.72. Same result.

EDIT: I changed the test to

import junit.framework.TestCase.assertTrue
import org.junit.jupiter.api.Test

class JvmTest {
    @Test
    fun testX() {
        assertTrue(false)
    }
}

Same result, build runs succeful, no test is executed. There are no files in build/reports/tests

3

3 Answers

0
votes

Look in [project]/build/reports/tests and look for the various index.html files.

Also, to verify that a test is run, it might be easier to fail the test rather than print a statement. Something like the following.

@Test
fun testX() {
    assertTrue(false)
}

I assume all of your tests are in the jvm source as they import junit. I'd also try one in the commonTest source to make sure that's all working as expected.

0
votes

adding

tasks.jvmTest{
    useJUnitPlatform()
}

in the build.gradle fixes the problem.

build.gradle now looks as follows:

buildscript {
    ext.kotlin_version = '1.4.0-rc'
}

plugins {
    id 'org.jetbrains.kotlin.multiplatform' version "$kotlin_version"
}

group 'org.example'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

kotlin {
    jvm {
        withJava()
    }

    sourceSets {
        commonMain {
            dependencies {
                implementation kotlin('stdlib')
                implementation kotlin('stdlib-common')
            }
        }
        commonTest {
            dependencies {
                implementation kotlin('test-common')
                implementation kotlin('test-annotations-common')
            }
        }
        jvmMain {
            dependencies {
                implementation kotlin('stdlib-jdk8')
            }
        }
        jvmTest {
            dependencies {
                dependsOn commonTest
                implementation kotlin('test')
                implementation kotlin('test-junit')
                implementation 'io.kotlintest:kotlintest-runner-junit5:3.3.2'
                implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
                runtimeOnly "org.junit.jupiter:junit-jupiter-engine:5.5.2"
                implementation "org.junit.jupiter:junit-jupiter-api:5.5.2"
                implementation "org.junit.jupiter:junit-jupiter-params:5.5.2"
            }
        }
    }
}

tasks.jvmTest{
    useJUnitPlatform()
}
-1
votes

Try adding

test {
    testLogging {
        showStandardStreams = true
    }
}