簡體   English   中英

在Kotlin中模擬http響應

[英]Mocking a http response in kotlin

目前,我正在從事一個業余項目,我想學習一些有關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") }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM