1

我正在尝试将 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 文件中使用的?

4

1 回答 1

1

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
        }
    }
}
于 2020-06-03T17:23:01.597 回答