我正在用Kotlin编写一个使用KMongo协同器的小应用程序,我想使用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)
}
}错误的根源是什么?
发布于 2022-09-26 19:09:19
我发现了这个错误,它比我想象的要简单得多:显然,从Windows终端启动的gradlew无法读取环境变量。
我以这种方式修改了build.gradle.kts文件,一切都很好:
tasks.withType<Test> {
useJUnitPlatform()
environment("VAR1", "value 1")
environment("VAR2", "value 2")
environment("VARN", "value N")
}https://stackoverflow.com/questions/73839486
复制相似问题