在SpringBootTest中使用WireMock连接被拒绝

问题描述 投票:0回答:1

我在 Spring Boot 集成测试中观察到一些我还不理解的行为。

给出以下抽象基类,它初始化“通用”测试内容;在这种情况下

WireMock
和 Spring 的
WebTestClient

AbstractSpringIT.java

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles("integration-test")
@AutoConfigureWebTestClient
public abstract class AbstractSpringIT {

    @RegisterExtension
    static WireMockExtension wireMockServer = WireMockExtension.newInstance()
            .options(wireMockConfig().dynamicPort())
            .build();

    @DynamicPropertySource
    static void configureProperties(DynamicPropertyRegistry registry) {
        registry.add("app.backend-url", wireMockServer::baseUrl);
    }

    @Autowired
    WebTestClient webTestClient;
}

然后,有两个测试类扩展了

AbstractSpringIT

另一个IT.java

public class AnotherIT extends AbstractSpringIT {
 
    @Test
    void should_pass() {
        wireMockServer.stubFor(get("/some-path").willReturn(ok()));

        webTestClient.mutateWith(mockOAuth2Client("keycloak"))
                .get()
                .uri("/some-path")
                .exchange()
                .expectStatus()
                .is2xxSuccessful();
    }
}

一些IT.java

public class SomeIT extends AbstractSpringIT {

    @Test
    void should_pass() {
        webTestClient.mutateWith(mockOAuth2Login()))
                .get()
                .uri("/api/user")
                .exchange()
                .expectStatus().isOk();
    }
}

单独开始时,两个测试类都通过了。然而,当它们一起运行时,

AnotherIT
由于
Connection refused: localhost/[0:0:0:0:0:0:0:1]:39813
而失败。

我可以将范围缩小到这个:

  • 按字母顺序运行测试(由 Maven 控制)使两个测试类都通过,即
    AnotherIT
    运行于 before
    SomeIT
  • 当两个测试类都使用自己的
    WireMockExtension
    @DynamicPropertySource
    时,它们都会通过。
spring spring-boot spring-test wiremock
1个回答
0
投票

你解决了吗?您将其注册为

@RegisterExtension
,因此它具有生命周期,可能会在所有测试方法之后停止服务器(但对于特定类)。也许再次盯着它会生成一个新端口(
dynamicPort
选项),使您的
@DynamicPropertySource
过时?我无法解释为什么顺序很重要。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.