我用 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);
}
}
测试必须独立运行。 另外,如果第一次调用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);
}
}