模拟网络服务器:java.lang.NoSuchMethodError

MockWebServer: java.lang.NoSuchMethodError

第一次在使用 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)

谢谢!

尝试添加这个:

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

对于 MockWebServer,您的 OkHttp 依赖项必须是同一版本。

我遇到了同样的问题,我在版本中找到了解决方案,只需将版本更改为“3.7.0”即可正常使用。

有一些关于版本更改为“3.4.1”的讨论,但这个版本遇到了问题(无法从最终 class 继承),在这个问题上讨论过: 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")