I am trying to add kotest to my library, but am just getting:
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
I must be messing up somewhere in my build.gradle.kts, and something isn't loading or useJUnitPlatform() is not running, but i'm not sure where. Can anyone spot where I have gone wrong?
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")
Update:
This works, though with deprecation warnings, if I use:
import io.kotlintest.specs.StringSpec
import io.kotlintest.shouldBe
Though io.kotest is what i used in the build.gradle.kts file?
StringSpec is now in the
io.kotest.core.spec.stylepackage, notio.kotest.specs.shouldBeis now in theio.kotest.matcherspackage, notio.kotest.If you remove both lines from your code, IntelliJ will likely suggest to use the new imports, but your code will look like this: