如何在 kotlin 中使用模拟和燃料模拟 POST 请求?

use*_*870 6 http request kotlin mockk

我正在使用燃料库在 kotlin 中发出一些 http 请求。我想使用 mockk 库测试该代码。我想出了如何模拟 http 请求。下面是代码。

    val client = mockk<Client>()
    every { client.executeRequest(any()).statusCode } returns 200
    every { client.executeRequest(any()).responseMessage } returns "test"
    every { client.executeRequest(any()).data } returns "abc".toByteArray()

    FuelManager.instance.client = client

    assertEquals("abc" , testHttpRequest())
Run Code Online (Sandbox Code Playgroud)

我不喜欢any()这里。我想具体说明一下 http 方法和 url。我想根据被调用的 url 和正在使用的 http 方法返回特定的响应。

我想可能是我可以做以下

    val req = Request(Method.POST, "my/test", URL("https://testRequest.com"), timeoutInMillisecond = 3000, timeoutReadInMillisecond = 3000)

    every { client.executeRequest(req).statusCode } returns 200
    every { client.executeRequest(req).responseMessage } returns "OK"
    every { client.executeRequest(req).data } returns "abc".toByteArray()

    FuelManager.instance.client = client
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误。

io.mockk.MockKException: no answer found for: Client(#1).executeRequest(--> 
https://testRequest.com/my/test
"Body : abc"
"Headers : (3)"
Accept-Encoding : compress;q=0.5, gzip;q=1.0
Content-Type : application/json
Authorization : Basic xxx)
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么?

Vov*_*huk 0

尝试使用以下内容:

 every { client.executeRequest(req) } returns <mock object>
Run Code Online (Sandbox Code Playgroud)