WireMock 的集成测试失败,因为未找到 ALPN 处理器

Integration tests with WireMock failing because no ALPN Processors are found

我正在为用 Kotlin 编写的 Spring 引导应用程序编写一些集成测试。为了存根一些 HTTP 请求,我通过 spring-cloud-contract-wiremock 使用 WireMock 作为依赖项。

来自集成测试的一些匿名示例代码:

@SpringBootTest
@AutoConfigureMockMvc
@AutoConfigureWireMock
class MyIntegrationTest { 

    @Test
    fun `some test`() {
        mockEndpoint("url", 500, someResponseBodyInJson)

        mockMvc.perform(
            MockMvcRequestBuilders
                .post("url")
                .contentType(MediaType.APPLICATION_JSON.toString())
                .content(someRequestBodyInJson)
        )
            .andExpect(MockMvcResultMatchers.status().isInternalServerError)
    }

    private fun mockEndpoint(url: String, responseCode: Int, responseBody: String) {
        stubFor(
            WireMock.post(url).willReturn(
                WireMock.aResponse()
                    .withStatus(responseCode)
                    .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON.toString())
                    .withBody(responseBody)
            )
        )
    }

}

虽然 运行 这些测试是在我的本地机器上进行的,但一切正常。在 CI/CD 环境中它失败了,但出现以下错误:

java.lang.IllegalStateException: No Server ALPNProcessors!
at wiremock.org.eclipse.jetty.alpn.server.ALPNServerConnectionFactory.<init>(ALPNServerConnectionFactory.java:52)

我进行了一些搜索,发现这与 Jetty 在 class 路径上遗漏了一些东西有关。我添加了以下依赖项 testImplementation("org.eclipse.jetty:jetty-alpn-server:11.0.7"),但测试仍然失败。由于正在使用 JDK 11,因此不需要 alpn-boot 扩展名。

谁能帮我解决这个问题?我需要另一个依赖项还是我看错方向了?

降级到 Jetty 9。4.x

Wiremock 不支持 Jetty 10 或 Jetty 11。

此外,Spring 不支持 Jetty 11(在新命名空间 jakarta.servlet 上使用 Jakarta EE 9 和 Servlet 5.0)

Wiremock 团队在 2.32 版中解决了这个问题,有一个票证 here。您需要为 wiremock-jre8-standalone 指定正确的版本以覆盖由 Spring:

提取的旧版本
# Gradle
testImplementation 'com.github.tomakehurst:wiremock-jre8-standalone:2.32.0'

#Maven
<dependency>
    <groupId>com.github.tomakehurst</groupId>
    <artifactId>wiremock-jre8-standalone</artifactId>
    <version>2.32.0</version>
    <scope>test</scope>
</dependency>