如何仅在MockWebServer中测试改造请求参数而不实际执行请求?

时间:2020-07-19 02:51:59

标签: android unit-testing retrofit mockwebserver

我知道可以使用MockWebServer测试改造请求和响应,如下所示:

interface AppApi {
    @GET("/time/")
    suspend fun time(): TimeResponse
}
...

class CoinBaseApiClientTest {

    private val mockWebServer = MockWebServer()

    private fun createClient(): AppApi {
        return AppApiFactory.createAppApi(baseUrl = mockWebServer.url("/").toString())
    }

    @Before
    fun setUp() {
        mockWebServer.start()
    }

    @After
    fun tearDown() {
        mockWebServer.shutdown()
    }

    @Test
    fun fetches_time() = runBlocking {
        val timeData: String = """
        {
            "iso": "2015-01-07T23:47:25.201Z",
            "epoch": 1420674445.201
        }
    """
        mockWebServer.enqueue(MockResponse().mockSuccess(200, timeData))

        val timeResponse = createClient().time()
        val recordedRequest = mockWebServer.takeRequest()

        assertThat(recordedRequest.path).isEqualTo("/time/")
        assertThat(timeResponse.iso).isEqualTo("2015-01-07T23:47:25.201Z")
        assertThat(timeResponse.epochAsMillis).isEqualTo(1420674445201)
    }

但是,就我而言,我只想测试其请求有效负载,例如pathheader ...,而无需实际执行time() API(原因是实际的timeData确实很大)。因此,我设置了mockWebServer.enqueue(MockResponse()),但是它不起作用-似乎需要有效的TimeResponse JSON数据。

您知道可以只测试翻新请求有效负载而无需实际执行请求吗?

1 个答案:

答案 0 :(得分:0)

您可以让它返回带有空数据的错误状态代码(即500)。