MockWebServer: java.lang.NoSuchMethodError

Впервые пробуем MockWebServer в проекте Groovy/Spring, который использует Spock для модульного тестирования.

Я добавил зависимости MockWebServer, как указано (мне пришлось добавить вторую строку самому, чтобы избежать ошибок, но это не задокументировано:

testImplementation("com.squareup.okhttp3:mockwebserver:4.0.0")
testImplementation("org.jetbrains.kotlin:kotlin-stdlib:1.3.40")

У меня есть базовый тест Спока, который выглядит так:

def 'server'() {
    setup:
    MockWebServer server = new MockWebServer()

    expect:
    server
}

Но это не удается с этим выводом:

java.lang.NoSuchMethodError: okhttp3.internal.Util.immutableListOf([Ljava/lang/Object;)Ljava/util/List;

    at okhttp3.mockwebserver.MockWebServer.<init>(MockWebServer.kt:176)

Есть ли еще одна зависимость, которую мне не хватает? MockWebServer плохо работает с Groovy и Spock?

Что бы это ни стоило, использование версии 3.1.4, похоже, работает:

testImplementation("com.squareup.okhttp3:mockwebserver:3.14.2")

(Я впервые пользуюсь MockWebServer)

Благодарю вас!


person user3303372    schedule 02.07.2019    source источник


Ответы (2)


Попробуйте добавить это:

testImplementation("com.squareup.okhttp3:mockwebserver:4.0.0")
testImplementation("com.squareup.okhttp3:okhttp:4.0.0")

С MockWebServer ваша зависимость OkHttp должна быть той же версии.

person Jesse Wilson    schedule 03.07.2019
comment
Я вижу, что мне не хватало зависимости от библиотеки okhttp. Спасибо!! - person user3303372; 08.07.2019
comment
Это не работает для меня. После того, как я перешел на Android Studio 4.1 Canary 9, код, который работал ранее, перестал работать. Я пробовал версии gradle вверх и вниз, повторно загружал старый проект, менял версии mockwebserver и okhttp, но все равно не работал. Строка, которую я получаю с ошибкой, это mockWebServer = MockWebServer() - person Thracian; 02.06.2020
comment
@Thracian Я думаю, вам может понадобиться сообщить об ошибке в Android Studio 4.1 Canary 9. - person Jesse Wilson; 03.06.2020

У меня та же проблема, я нашел решение в версии, просто измените версию на «3.7.0», и все работает нормально.

есть некоторые обсуждения изменения версии на «3.4.1», но в этой версии возникла проблема (невозможно наследовать от конечного класса), которая обсуждалась в этом выпуске: https://github.com/andrzejchm/RESTMock/issues/56
поэтому самая безопасная версия — «3.7.0» :D

просто обратите внимание, что обе версии должны быть одинаковыми.. измените свои зависимости на следующие:

//mock retrofit
testImplementation("com.squareup.okhttp3:mockwebserver:3.7.0")
testImplementation("com.squareup.okhttp3:okhttp:3.7.0")
//if your source code is java
testImplementation("org.jetbrains.kotlin:kotlin-stdlib:1.3.40")
person Sepehr    schedule 07.07.2019