代码之家  ›  专栏  ›  技术社区  ›  fabianski

在kotlin中模拟http响应

  •  1
  • fabianski  · 技术社区  · 7 年前

    目前我正在做一个爱好项目,我想了解一下科特林。 我实现了一个对象,它发出HTTP get请求并从响应中返回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")))
        }
    
    }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Rinat Suleimanov    6 年前

    您可以这样使用它:

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