Unit testing kotlin多平台库简单http get请求测试
我是kotlin多平台图书馆的新手。 我想做一个简单的HTTPGET请求,并测试它是否有效。 这是我到目前为止所拥有的。 这在commonMain包中Unit testing kotlin多平台库简单http get请求测试,unit-testing,kotlin,kotlin-coroutines,kotlin-multiplatform,Unit Testing,Kotlin,Kotlin Coroutines,Kotlin Multiplatform,我是kotlin多平台图书馆的新手。 我想做一个简单的HTTPGET请求,并测试它是否有效。 这是我到目前为止所拥有的。 这在commonMain包中 import io.ktor.client.* import io.ktor.client.request.* object HttpCall { private val client: HttpClient = HttpClient() suspend fun request(url: String): String = cl
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") }
}
现在,由于第二个断言,这应该会失败,但事实并非如此。
不管我做什么,考试总是通过。
而且打印响应也不起作用
我做错了什么?测试函数将在单个线程中运行,如果函数结束时没有失败,测试将通过
GlobalScope.launch
在不同线程中启动操作。主测试线程将在网络调用有机会运行之前完成
您应该使用类似于
runBlocking
的方法来调用此函数,但是在Kotlin native上测试协同路由,特别是ktor,并不容易,因为没有简单的方法可以让挂起的函数在当前线程上继续。谢谢。我现在就知道了