spring 如何验证Wirerock服务是否获得一些调用

sr4lhrrt  于 2022-12-26  发布在  Spring
关注(0)|答案(1)|浏览(126)

我正在对服务A进行功能测试。该功能由来自服务B的API调用1触发,然后最后响应(发送另一个API调用2)服务B。因此,计划是对服务B进行有线测试并发出调用1,然后验证它是否收到API调用2请求。
我们在Docker组合文件中使用Wirerock来模拟服务B,如下所示:

service-b:
    image: ***/wiremock-service-b
    ports:
      - "8081:8081"
    volumes:
      - ./wiremock/service-b/mappings/:/home/wiremock/mappings/

有什么方法可以让我得到这个服务B wirerock示例(部署在docker)使用java代码,并触发了调用1,然后验证调用2请求回来?请帮助。谢谢。

ogq8wdun

ogq8wdun1#

看起来你在测试中混合了两种方法。我假设你正在做一个集成测试:
1.使用Wiremock时,不需要在Docker容器中启动服务。Wiremock的目的是模拟调用要模拟的服务时收到的响应。在这种情况下,您实际上并不调用服务。
1.通过第二种方法,您可以使用Docker容器和TestContainer。在这种情况下,要检查是否调用了服务,您必须测试响应并检查这是否是您预期的结果。首先,您要调用的服务(在您的容器中)必须由API公开,然后在您正在测试的服务中,您使用TestRestemplateWebTestClient调用服务。
示例代码如下所示:

@Test
void integrationTest_For_Status_200() {
    webTestClient.post()
            .uri("THE_SERVICE_URL")
            .accept(MediaType.APPLICATION_JSON)
            .bodyValue(personDto)
            .exchange()
            .expectStatus().isOk()
            .expectBody(Response.class)
            .value(response -> assertAll(
                    () -> assertThat(response.getStatusValue()).isEqualTo(HttpStatus.OK.value()),
                    () -> assertThat(response.getStatusReasonPhrase()).isEqualTo(HttpStatus.OK.getReasonPhrase()),
                    () -> assertThat(response.getDescription()).isEqualTo(category.getDescription())
            ));
}

我建议使用以下链接来解释集成测试的方法:https://rieckpil.de/guide-to-springboottest-for-spring-boot-integration-tests/https://www.freecodecamp.org/news/integration-testing-using-junit-5-testcontainers-with-springboot-example/https://docs.spring.io/spring-framework/docs/current/reference/html/testing.html#webtestclient-tests

相关问题