如何使用MockWebServer测试下载进度

时间:2018-09-21 03:17:59

标签: android unit-testing okhttp3 mockwebserver

我写了一小段代码,使用OkHttp3下载文件并通过侦听器报告进度,为此,我使用了食谱here中提供的示例实现。 现在测试一下,我正在使用MockWebServer,我的问题是,如果MockResponse主体很小,则不会报告实际进度。为了获得较大的回应,我尝试了两种方法:

  1. 具有大于内部缓冲区大小的响应主体:

    val bytes = ByteArray(10000)
    Random().nextBytes(bytes)
    server.enqueue(MockResponse()
            .setResponseCode(200)
            .setBody(bytes.toByteString().utf8()))
    

    在这种情况下,仅返回一个响应,换句话说,ForwardingSource#read仅被调用一次。

  2. 调用setChunkedBody,这将使ForwardingSource#read被调用多次,直到完全读取响应为止:

    val bytes = ByteArray(1024)
    Random().nextBytes(bytes)
    server.enqueue(MockResponse()
            .setResponseCode(200)
            .setChunkedBody(bytes.toByteString().utf8(), 256))
    

    这里的问题是content-length为-1,所以无法计算进度。

如何解决?

0 个答案:

没有答案