目前,我正在从事一项业余项目,我想学习一些有关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/