SpringBootTest 和 WebTestClient 在运行多个测试时给出 409 状态冲突响应

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

我用 SpringBootTest 和 WebTestClient 编写了一些集成测试。但是,当我尝试通过单击运行测试类及其所有测试来运行它们时,它会给出 409 的状态,而不是当它们逐一运行时给出 201 或 200 状态代码。如果问题是所有测试都由一个端口运行,我该如何配置它,以便所有测试都能一起通过?

代码:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class ControllerTest {

@Autowired
private WebTestClient webTestClient;

@Test
void happyPath_createIndex() {
    
    CreationInputDto input = new CreationInputDto();

    webTestClient
            .post()
            .uri("/create")
            .body(Mono.just(input), CreationInputDto.class)
            .exchange()
            .expectStatus().isEqualTo(201);
}

@Test
void happyPath_adjustIndex_additionOperation() {
    
    happyPath_createIndex();
   
    AdjustmentInputDto input = new AdjustmentInputDto();

    webTestClient
            .post()
            .uri("/indexAdjustment")
            .body(Mono.just(input), AdjustmentInputDto.class)
            .exchange()
            .expectStatus().isEqualTo(201);
}
}
java spring-boot integration-testing webtestclient
1个回答
0
投票

测试必须独立运行。 另外,如果第一次调用happyPath_createIndex()时已经创建了数据,则无需在下面再次调用happyPath_createIndex()。

在第二个测试中,您必须通过不调用 happyPath_createIndex() 或写入与第一个测试不同的 Dto 数据来编写新的 Web 客户端代码。

试试这个:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class ControllerTest {

    @Autowired
    private WebTestClient webTestClient;

    @Test
    void happyPath_createIndex() {
        CreationInputDto input = new CreationInputDto();
        webTestClient
                .post()
                .uri("/create")
                .body(Mono.just(input), CreationInputDto.class)
                .exchange()
                .expectStatus().isEqualTo(201);
    }

    @Test
    void happyPath_adjustIndex_additionOperation() {    
        AdjustmentInputDto adjustmentInput = new AdjustmentInputDto();
        webTestClient
                .post()
                .uri("/indexAdjustment")
                .body(Mono.just(adjustmentInput), AdjustmentInputDto.class)
                .exchange()
                .expectStatus().isEqualTo(201);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.