Kotlin / Ktor,不能使用 withtTestApplication 因为我的 main 是一个挂起函数
Posted
技术标签:
【中文标题】Kotlin / Ktor,不能使用 withtTestApplication 因为我的 main 是一个挂起函数【英文标题】:Kotlin / Ktor, cant use withtTestApplication because my main is a suspend function 【发布时间】:2021-06-18 21:33:55 【问题描述】:我的主要是这样的
suspend fun main(testing: Boolean = false)
// do some db related stuff with coroutines
dbSetupRun() // this is using coroutines
embeddedServer(Netty, 8080)
...
.start(wait = true
我的测试代码看起来像
@Test
suspend fun `test` ()
withTestApplication( main(testing = true) )
handleRequest(HttpMethod.Get, "$config.root/$config.version/test").apply
assertEquals(HttpStatusCode.OK, response.status())
assertEquals(response, content)
但我收到一条错误消息,指出该代码的 Suspend function 'main' should be called only from a coroutine or another suspend function
很困惑我应该如何处理这个
【问题讨论】:
TestApplication 有什么用? 这是我一直用于测试应用程序的 Ktor 函数 api.ktor.io/0.9.5/io.ktor.server.testing/… 看起来它不支持挂起功能。为什么你的主要暂停? 【参考方案1】:您应该将 main
函数调用包装到协程构建器中,例如 runBlocking
(建议用于测试)。
withTestApplication( runBlocking main(testing = true) )
【讨论】:
以上是关于Kotlin / Ktor,不能使用 withtTestApplication 因为我的 main 是一个挂起函数的主要内容,如果未能解决你的问题,请参考以下文章
使用 Ktor Kotlin 处理 FreeMaker 模板
如何使用内容协商将 json 转换为 ktor 中的 kotlin 对象?
Ktor 1.0 发布:Kotlin Web 框架;GoLand 2018.3 正式版发布!| 更新
Ktor 应用程序未在使用 IntelliJ IDEA 的 Kotlin 多平台项目中运行
kotlin.native.concurrent.InvalidMutabilityException:在 Kotlin Multiplatform (iOS) 中使用 ktor 时冻结 <ob