I tried to mock the Ktor HttpClient.post(url, HttpRequestBuilder.() -> Unit)
in my tests like this.
@Test
fun `submit report`() = runTest {
val mockHttpClient: HttpClient = mockk()
val mockResponse: HttpResponse = mockk()
coEvery { mockResponse.status } returns HttpStatusCode.OK
coEvery { mockResponse.body<HandlingResponse.Success>(any(TypeInfo::class)) } returns HandlingResponse.Success()
val mockFunc: HttpRequestBuilder.() -> Unit = mockk(relaxed = true)
coEvery { mockFunc.invoke(any())} returns Unit
coEvery { mockHttpClient.post(any<String>(), mockFunc) } returns mockResponse
val client = HandlingReportClient(mockHttpClient)
val result = client.submitReport(report)
result is HandlingResponse.Success
assertEquals("OK", result.toString())
}
When running the test, it is blocked and always running and not finished.