首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gradle + Kotest + KMongo Coroutines无法创建类的实例

Gradle + Kotest + KMongo Coroutines无法创建类的实例
EN

Stack Overflow用户
提问于 2022-09-24 18:02:52
回答 1查看 38关注 0票数 0

我正在用Kotlin编写一个使用KMongo协同器的小应用程序,我想使用Kotest作为测试框架。

我编写了一个访问数据库和检索文档的简单测试:

代码语言:javascript
复制
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插件测试它时,它可以工作,但是如果我使用

代码语言:javascript
复制
./gradlew kotest

命令我收到这个错误。

代码语言:javascript
复制
Could not create instance of class org.wagham.db.KabotMultiDBClientTest

如果删除客户端实例化,则gradle任务可以正常工作。

这是类的代码:

代码语言:javascript
复制
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)
    }
}

错误的根源是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-26 19:09:19

我发现了这个错误,它比我想象的要简单得多:显然,从Windows终端启动的gradlew无法读取环境变量。

我以这种方式修改了build.gradle.kts文件,一切都很好:

代码语言:javascript
复制
tasks.withType<Test> {
    useJUnitPlatform()
    environment("VAR1", "value 1")
    environment("VAR2", "value 2")
    environment("VARN", "value N")
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73839486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档