MockWebServer:java.lang.NoSuchMethodError

时间:2019-07-02 14:18:16

标签: okhttp spock okhttp3 mockwebserver

在使用Spock进行单元测试的Groovy / Spring项目中首次尝试使用MockWebServer。

我按照指示添加了MockWebServer依赖项(我不得不自己添加第二行以避免错误,但是没有记录:

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

我有一个基本的Spock测试,如下所示:

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的首次用户)

谢谢!

2 个答案:

答案 0 :(得分:1)

尝试添加此内容:

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

使用MockWebServer,您的OkHttp依赖项必须是相同的版本。

答案 1 :(得分:0)

我遇到了同样的问题,我找到了版本中的解决方案,只需将版本更改为“ 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")