4

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

我指的是本地主机: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);
        }
    }
}
4

2 回答 2

3

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

一位用户对此问题发表了评论,建议将其添加android:usesCleartextTraffic="true"到您的测试清单中。

于 2020-02-11T21:36:29.210 回答
1

You're right, OKHttp3 MockServer doesn't work on API 28 and up. I'm using 'com.squareup.okhttp3:mockwebserver:4.0.1', I needed to downgrade my project to 27 in order to get it to work.

于 2019-10-07T15:58:52.217 回答