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 是一个挂起函数的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin:Ktor 如何将文本响应为 html

使用 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