7

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

谢谢!

4

2 回答 2

12

尝试添加这个:

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

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

于 2019-07-03T04:33:03.930 回答
2

我遇到了同样的问题,我在版本中找到了解决方案,只需将版本更改为“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")
于 2019-07-07T09:23:33.300 回答