我正在使用 KMongo 協程在 Kotlin 中撰寫一個小型應用程式,并且我想使用 Kotest 作為測驗框架。
我撰寫了一個簡單的測驗來訪問資料庫并檢索檔案:
class KabotMultiDBClientTest : StringSpec({
val client = KabotMultiDBClient(
mapOf(
System.getenv("TEST_DB_ID")!! to MongoCredentials(
System.getenv("DB_TEST_USER")!!,
System.getenv("DB_TEST_PWD")!!,
System.getenv("TEST_DB")!!,
System.getenv("DB_TEST_IP")!!,
System.getenv("DB_TEST_PORT")!!.toInt(),
)
)
)
"dummy test" { true shouldBe true }
})
當我使用 IntelliJ Kotest 插件對其進行測驗時,它可以作業,但如果我使用
./gradlew kotest
命令我收到此錯誤。
Could not create instance of class org.wagham.db.KabotMultiDBClientTest
如果我洗掉客戶端實體,則 gradle 任務可以正常作業。
這是該類的代碼:
class KabotMultiDBClient(
credentials: Map<String, MongoCredentials>
) {
private val databaseCache = credentials.keys.fold(mapOf<String, CoroutineDatabase>()) { acc, guildId ->
credentials[guildId]?.let {
acc (guildId to
KMongo.createClient("mongodb://${it.username}:${it.password}@${it.ip}:${it.port}/${it.database}").coroutine.getDatabase(it.database))
} ?: throw InvalidCredentialsExceptions(guildId)
}
suspend fun getActiveCharacter(guildId: String, playerId: String): org.wagham.db.models.Character {
return databaseCache[guildId]?.let {
val col = it.getCollection<org.wagham.db.models.Character>("characters")
col.findOne(Document(mapOf("status" to "active", "player" to playerId)))
} ?: throw InvalidGuildException(guildId)
}
}
錯誤的根源可能是什么?
uj5u.com熱心網友回復:
我發現了錯誤,它比我想象的要瑣碎得多:顯然,從 Windows 終端啟動的 gradlew 無法讀取環境變數。
我以這種方式修改了build.gradle.kts檔案,一切正常:
tasks.withType<Test> {
useJUnitPlatform()
environment("VAR1", "value 1")
environment("VAR2", "value 2")
environment("VARN", "value N")
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/509863.html
