【问题标题】:kotlin multiplatform library simple http get request testkotlin 多平台库 简单http get请求测试
【发布时间】:2021-02-23 12:50:13
【问题描述】:

我是 kotlin 多平台库的新手。 我想做一个简单的 HTTP 获取请求并测试它是否有效。 这是我到目前为止所拥有的。 这是在 commonMain 包中

import io.ktor.client.*
import io.ktor.client.request.*

object HttpCall {
    private val client: HttpClient = HttpClient()
    suspend fun request(url: String): String = client.get(url)
}

这是我的测试尝试

@Test
    fun should_make_http_call() {

        GlobalScope.launch {
            val response = HttpCall.request("https://stackoverflow.com/")
            println("Response: ->$response")
            assertTrue { response.contains("Stack Overflow - Where Developers Learn") }
            assertTrue { response.contains("text that does not exist on stackoverflow") }
        }

现在,由于第二个断言,这应该会失败,但事实并非如此。 无论我做什么,测试总是通过。 并且打印响应也不起作用 我在这里做错了什么?

【问题讨论】:

    标签: unit-testing kotlin kotlin-coroutines kotlin-multiplatform


    【解决方案1】:

    测试函数将在单个线程中运行,如果函数结束没有失败,则测试通过。 GlobalScope.launch 在不同的线程中启动操作。主测试线程将在网络调用有机会运行之前完成。

    应该runBlocking之类的东西来调用它,但是在Kotlin本机上测试一般的协程,特别是ktor并不容易,因为没有简单的方法让暂停的函数继续在你当前的线程上。

    【讨论】:

    • 谢谢。我现在明白了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 2021-01-25
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 2021-04-25
    相关资源
    最近更新 更多