在Kotlin跨平台项目中运行测试

时间:2020-08-12 09:02:22

标签: kotlin kotlin-multiplatform

我已经设置了一个kotlin跨平台项目,并希望运行junit测试。

但是一个

gradle clean build

只提供:

Kotlin Multiplatform Projects are an experimental feature.

BUILD SUCCESSFUL in 1s
9 actionable tasks: 9 executed

这是我的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"
            }
        }
    }
}

这是我的测试(位于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")
    }
}

我希望Hello World的输出,但是如您所见,没有输出。

执行测试,我必须更改什么?还是执行了该输出,但未显示输出?我该怎么办才能查看测试的输出?

我也尝试过kotlin版本1.3.72。结果相同。

编辑:我将测试更改为

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

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

结果相同,构建成功运行,未执行测试。构建/报告/测试中没有文件

3 个答案:

答案 0 :(得分:0)

尝试添加

test {
    testLogging {
        showStandardStreams = true
    }
}

答案 1 :(得分:0)

查找[project]/build/reports/tests,然后查找各种index.html文件。

此外,要验证测试是否已运行,使测试失败而不是打印语句可能更容易。类似于以下内容。

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

我假设您的所有测试均在导入junit时位于jvm源中。我还会在commonTest源代码中尝试一种,以确保所有功能都能按预期工作。

答案 2 :(得分:0)

添加

tasks.jvmTest{
    useJUnitPlatform()
}

build.gradle中的问题已解决。

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')
                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()
}