android - Okhttp 模拟服务器不适用于 API 28 及更高版本的模拟器

标签 android okhttp mockserver

我的模拟服务器调度程序从未达到模拟器上的覆盖方法运行 API 28 及更高版本,但它在其他版本上运行良好。知道如何触发它吗?还是只是 API 版本问题?

我指向 localhost:8080。 okhttp版本为4.2.1。

fun search() {
    sleepSafely(3000)
    mockServer = MockWebServer()
    mockServer.dispatcher = ErrorDispatcher()
    mockServer.start(8080)
    sleepSafely(3000)
    // do the API request
}

public class ErrorDispatcher extends Dispatcher {

    @NotNull
    @Override
    public MockResponse dispatch(RecordedRequest request) {
        // never be triggered
        String path = request.getPath();
        if (path.equalsIgnoreCase("/api/v2/search/person")) {
            return new MockResponse()
                    .setResponseCode(404)
                    .setBody("{"MOCK_KEY": "MOCK_VALUE"}");
        } else if (path.equalsIgnoreCase("/api/v2/search/book")) {
            return new MockResponse()
                    .setResponseCode(404);
        } else {
            return new MockResponse().setResponseCode(404);
        }
    }
}

最佳答案

我认为这是因为 Android API 28+ 不再支持明文 HTTP 流量,而 MockWebServer 在 HTTP 上运行。

一位用户评论了 this issue建议将 android:usesCleartextTraffic="true" 添加到您的测试 list 。

关于android - Okhttp 模拟服务器不适用于 API 28 及更高版本的模拟器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58216634/

相关文章:

mockserver - 独立模拟服务器 : Where do I implement expectations?

java - 每个 CollectionGroup 中的最新文档

Android去除透明导航 View 的阴影

java - 在 Android 中从 JSON 对象对 JSON 数组进行排序?

Java org.mockserver 从文件加载响应主体

Android 类似 iphone 风格的 ActionBar

android - 在Android应用程序中居中对齐时如何找到 ImageView 的高度和宽度?

android - okHttp :why my application is crashing didnt get response

android - OkHttp3 hostnameVerifier 由 : javax.net.ssl.SSLException : Read error: ssl=0xc8cf1fc8: I/O error during system call, 对等方重置连接引起