我知道可以使用 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)
}
但是,在我的情况下,我只想测试它的请求负载,例如path
,header
...而不实际执行time()
API(原因是实际 timeData 真的很大)。所以我设置mockWebServer.enqueue(MockResponse())
但它不起作用 - 它似乎需要有效的 TimeResponse JSON 数据。
你知道是否可以只测试改造请求有效负载而不实际执行请求?