如何将Kotlin代码编译为jvmTarget =“ 1.8”进行测试

时间:2019-01-23 15:58:14

标签: android gradle kotlin android-gradle junit5

在我们的Android项目中,我们使用Kotlin进行编码,并以Java 1.6为目标。但是,由于某些JUnit5功能需要使用Java 1.8(接口中的静态方法),因此我们不得不在测试中使用Java 1.8。

是否可以将测试编译与生产代码不同?

我们试图通过将它添加到build.gradle中来将jvmTarget提升到1.8:

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
        kotlinOptions {
            jvmTarget = "1.8"
        }
}

这也会提高生产代码的jvmTarget,但是我们只希望将其用于测试。 Docs表示可以像这样为测试指定它:

compileReleaseUnitTestKotlin{
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

很遗憾,build.gradle无法编译。

2 个答案:

答案 0 :(得分:0)

Kotlin文档仅how to do提及它用于测试。

Groovy DSL:

np.multiply.reduce(..., axis=1)

科特琳DSL:

compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

答案 1 :(得分:0)

此代码段为我完成了工作:

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) {
    if (it.name.contains("UnitTest")) {
        kotlinOptions {
            jvmTarget = "1.8"
        }
    }
}

我不得不说,这不是根据测试任务的名称过滤测试任务的最佳解决方案,因此可以将其视为快速而肮脏的帮助。