我正在尝试将kotest添加到我的库中,但是却得到:

e: /home/brett/git/ttnt/src/test/kotlin/io/bmb/ttnt/lib/SqliteManagerTest.kt: (3, 18): Unresolved reference: specs
e: /home/brett/git/ttnt/src/test/kotlin/io/bmb/ttnt/lib/SqliteManagerTest.kt: (4, 18): Unresolved reference: shouldBe
e: /home/brett/git/ttnt/src/test/kotlin/io/bmb/ttnt/lib/SqliteManagerTest.kt: (6, 27): Unresolved reference: StringSpec
e: /home/brett/git/ttnt/src/test/kotlin/io/bmb/ttnt/lib/SqliteManagerTest.kt: (8, 9): Expression '"canary test should pass"' of type 'String' cannot be invoked as a function. The function 'invoke()' is not found
e: /home/brett/git/ttnt/src/test/kotlin/io/bmb/ttnt/lib/SqliteManagerTest.kt: (9, 18): Unresolved reference: shouldBe

我必须在build.gradle.kts中的某个地方弄乱了,并且某些东西没有加载或useJUnitPlatform()没有运行,但是我不确定在哪里。谁能发现我哪里出问题了?

src / test / kotlin / io / bmb / ttnt / lib / SqliteManagerTest.kt
package io.bmb.ttnt.lib

import io.kotest.specs.StringSpec
import io.kotest.shouldBe

class SqliteManagerTest : StringSpec() {
    init {
        "canary test should pass" {
            true shouldBe true
        }
    }
}

build.gradle.kts:
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar

buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        classpath("com.github.jengelman.gradle.plugins:shadow:2.0.4")
    }
}

plugins {
    idea
    id("org.jetbrains.kotlin.jvm") version "1.3.71"
    id("org.jetbrains.kotlin.kapt") version "1.3.72"
    jacoco
    id("com.github.johnrengelman.shadow") version "5.2.0"
}



group = "io.bmb.ttnt"
version = "0.1-ALPHA"

repositories {
    google()
    mavenCentral()
    jcenter()
    maven {
        name="papermc"
        url=uri("https://papermc.io/repo/repository/maven-public/")
    }
    maven {
        url=uri("https://hub.spigotmc.org/nexus/content/repositories/snapshots")
    }
    maven {
        url=uri("https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc")
    }
}


dependencies {
    compile("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")

    compileOnly("com.destroystokyo.paper:paper-api:1.14.4-R0.1-SNAPSHOT")
    compile("io.papermc:paperlib:1.0.3")

    compile(group="org.xerial", name="sqlite-jdbc", version="3.28.0")

    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.7")
    testCompile("io.kotest:kotest-runner-junit5-jvm:4.0.6") // for kotest framework
    testCompile("io.kotest:kotest-assertions-core-jvm:4.0.6") // for kotest core jvm assertions
    testCompile("io.kotest:kotest-property-jvm:4.0.6") // for kotest property test
    testImplementation("io.mockk:mockk:1.10.0")
}

tasks.withType<ShadowJar> {
    baseName = "ttnt"
    classifier = "ALPHA"
    version = "0.1"
}

tasks.test {
    finalizedBy(tasks.jacocoTestReport) // report is always generated after tests run
}

tasks.jacocoTestReport {
    dependsOn(tasks.test) // tests are required to run before generating the report
    reports {
        xml.isEnabled = false
        csv.isEnabled = false
        html.destination = file("${buildDir}/jacocoHtml")
    }
}

jacoco {
    toolVersion = "0.8.5"
    reportsDir = file("$buildDir/customJacocoReportDir")
}

java {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
}

idea {
    module {
        isDownloadJavadoc = true
        isDownloadSources = true
    }
}

tasks.withType<Test> {
    useJUnitPlatform()
}

val compileKotlin: KotlinCompile by tasks
val compileTestKotlin: KotlinCompile by tasks

compileKotlin.kotlinOptions.jvmTarget = "1.8"
compileTestKotlin.kotlinOptions.jvmTarget = "1.8"

defaultTasks("clean", "test", "jacocoTestReport")

更新:

如果我使用以下方法,虽然可以使用弃用警告,但该方法有效:
import io.kotlintest.specs.StringSpec
import io.kotlintest.shouldBe

虽然io.kotest是我在build.gradle.kts文件中使用的文件?

最佳答案

StringSpec现在位于io.kotest.core.spec.style包中,而不是io.kotest.specs中。
shouldBe现在在io.kotest.matchers包中,而不是io.kotest中。

如果您从代码中删除了这两行,则IntelliJ可能会建议使用新的导入,但是您的代码将如下所示:

package io.bmb.ttnt.lib

import io.kotest.core.spec.style.StringSpec
import io.kotest.matchers.shouldBe

class SqliteManagerTest : StringSpec() {
    init {
        "canary test should pass" {
            true shouldBe true
        }
    }
}

关于kotlin - Kotest设置问题 'unresolved reference',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62154872/

10-10 10:07