gpt4 book ai didi

unit-testing - 在Kotlin中模拟http响应

转载 作者:行者123 更新时间:2023-12-02 13:38:45 28 4
gpt4 key购买 nike

目前,我正在从事一项业余项目,我想学习一些有关Kotlin的知识。
我实现了一个对象,该对象发出HTTP获取请求并从响应中返回Json对象。
我正在努力的是在测试中模拟响应或http框架。

我认为,如果框架将提供一个类,则可以管理模拟。但是由于它仅提供类似khttp.get()的功能,因此我对如何模拟它有些困惑。

有人能帮助我吗? :)
谢谢!

HTTPClient类:

package dao.http.HTTPClient
import khttp.get
import org.json.JSONObject
import java.net.URLDecoder

class HTTPClient {
fun getClient(): HTTPClient {
return this
}

fun httpRequestGET(url: String): JSONObject {
val r = get(url)
return r.jsonObject
}
}

和相关的考试类
import dao.http.HTTPClient
import io.mockk.every
import io.mockk.spyk
import org.hamcrest.MatcherAssert.assertThat
import org.json.JSONObject
import org.junit.jupiter.api.Test
import org.hamcrest.CoreMatchers.`is` as Is
import khttp.responses.GenericResponse

class HTTPClientTest {

@Test
fun testHTTPRequestGET() {
val http_get = spyk(khttp.get( "https://somepage.com/wp-json/tsapi/v1/user/ts/isregistered/12323"))
val httpClient = HTTPClient()

var expectedAnswer: JSONObject = JSONObject("""{"uid":"1","user":"user","is_registered":"true"}""")
every { http_get } returns GenericResponse()

var url = "https://somepage.com/wp-json/tsapi/v1/user/ts/isregistered/12323"

var actualAnswer = httpClient.httpRequestGET(url)

assertThat(actualAnswer.get("user"), Is(expectedAnswer.get("user")))
}

}

最佳答案

您可以像这样使用它:

@Test
fun test() {
mockkStatic("khttp.KHttp")
verify { khttp.get(any()) }
verify(exactly = 1) { khttp.get(url = "http://google.com") }
}

关于unit-testing - 在Kotlin中模拟http响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49079218/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com