java.lang.NoSuchMethodError : okhttp3.internal.Internal.initializeInstanceForTests()在Android上创建模拟服务器时

标签 java android mocking okhttp

java.lang.NoSuchMethodError: okhttp3.internal.Internal.initializeInstanceForTests() 在 Android 上创建模拟服务器时

我尝试更新依赖项,但没有成功。

我是 Android 单元测试新手,我想测试 API 调用是否成功。我正在开发开源项目 https://github.com/commons-app/apps-android-commons (排行榜分支)

java.lang.NoSuchMethodError: okhttp3.internal.Internal.initializeInstanceForTests()V

    at okhttp3.mockwebserver.MockWebServer.<clinit>(MockWebServer.java:103)
    at fr.free.nrw.commons.leaderboard.LeaderboardApiTest.initTest(LeaderboardApiTest.java:35)
public class LeaderboardApiTest {

    MockWebServer server;

    @Before
    public void initTest() {
        server = new MockWebServer();
    }

    @Before
    public void setUp() throws IOException {
        server.enqueue(new MockResponse().setBody("{\n"
            + "    \"status\": 200,\n"
            + "    \"username\": \"user\",\n"
            + "    \"category_count\": 0,\n"
            + "    \"limit\": null,\n"
            + "    \"avatar\": \"avatar\",\n"
            + "    \"offset\": null,\n"
            + "    \"duration\": \"all_time\",\n"
            + "    \"leaderboard_list\": [\n"
            + "        {\n"
            + "            \"username\": \"user\",\n"
            + "            \"category_count\": 0,\n"
            + "            \"avatar\": \"avatar\",\n"
            + "            \"rank\": 1\n"
            + "        }\n"
            + "    ],\n"
            + "    \"category\": \"used\",\n"
            + "    \"rank\": 1\n"
            + "}"));
        server.start();
    }

    @Test
    public void apiTest() throws IOException, JSONException {
        HttpUrl httpUrl = HttpUrl.parse(NetworkingModule.TEST_TOOLS_FORGE_URL);
        LeaderboardResponse response = sendRequest(new OkHttpClient(), httpUrl);
        Assert.assertEquals("avatar", response.getAvatar());
        Assert.assertEquals("username", response.getUsername());
        Assert.assertEquals(Integer.valueOf(0), response.getRank());
        Assert.assertEquals(Integer.valueOf(0), response.getCategoryCount());
    }

    private LeaderboardResponse sendRequest(OkHttpClient okHttpClient, HttpUrl httpUrl)
        throws IOException, JSONException {
        Request request = new Builder().url(httpUrl).build();
        Response response = okHttpClient.newCall(request).execute();
        if (response.isSuccessful()) {
            Gson gson = new Gson();
            return gson.fromJson(response.body().toString(), LeaderboardResponse.class);
        }
        return null;
    }

    @After
    public void shutdown() throws IOException {
        server.shutdown();
    }
}

最佳答案

更新 Okhttp 版本解决了问题

configurations.all {
        exclude module: 'okhttp-ws'
}

implementation 'com.squareup.okhttp3:okhttp:4.8.0'
implementation 'com.squareup.okhttp3:okhttp-ws:3.4.1'
testImplementation "com.squareup.okhttp3:mockwebserver:4.8.0"
androidTestImplementation 'com.squareup.okhttp3:mockwebserver:4.8.0'

关于java.lang.NoSuchMethodError : okhttp3.internal.Internal.initializeInstanceForTests()在Android上创建模拟服务器时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62865787/

相关文章:

Java 相当于 C# Array.Copy

c# - 使用 NServiceBus 在应用程序中测试 Bus.Send

android - 为什么 viewModelScope 在其子级失败时会自行取消?

javascript - 值不能从 ReadableNativeMap 转换为 double

android - 将 android-support-v7-appcompat 添加到 Eclipse 上的项目时,项目选择 Pane 为空白

python - python中函数字典中的模拟函数

python - 如何使用模拟来 stub 方法装饰器?

java - 如何在 android 的 gridview 中添加搜索功能?

java - 如何在 Cassandra 中为更新集合(集合)编写 QueryBuilder 查询

java - ActionAdapter 无法解析为类型