gpt4 book ai didi

java - 使用 Spring WebFlux 测试时,DTO 的内部列表为空

转载 作者:行者123 更新时间:2023-12-01 18:48:25 24 4
gpt4 key购买 nike

我有以下单元测试(JUnit 5):

FluxExchangeResult<CalendarDTO> calendarEntityResult = client.get()
.exchange()
.expectStatus().isOk()
.expectHeader().contentType(MediaType.APPLICATION_JSON_UTF8)
.returnResult(CalendarDTO.class);

assertNotNull(calendarEntityResult);
final Flux<CalendarDTO> responseBody = calendarEntityResult.getResponseBody();
responseBody.flatMap(calendarDTO -> {
assertNotNull(calendarDTO);
final List<AppointmentDTO> calendarEvents = calendarDTO.getCalendarEvents();
assertNotNull(calendarEvents);
assertFalse(calendarEvents.isEmpty());

return Flux.just(calendarEvents);
}).map(calendarEvents ->
calendarEvents.get(0)
).doOnNext(appointmentDTO ->
assertEquals(appointmentDTO, validAppointmentDTO())
).subscribe();
/*StepVerifier.create(responseBody)
.assertNext(calendarDTO -> {
assertNotNull(calendarDTO);
final List<AppointmentDTO> calendarEvents = calendarDTO.getCalendarEvents();
assertNotNull(calendarEvents);
assertFalse(calendarEvents.isEmpty());

final AppointmentDTO appointmentDTO = calendarEvents.get(0);
assertNotNull(appointmentDTO);
assertEquals(validAppointmentDTO(), appointmentDTO);
})
.expectComplete()
.verify();*/

由于某种原因,assertNotNull(calendarEvents); 失败。使用 Postman 运行该方法本身就很好。让我困惑的是,在调试时,calendarEntityResultcalendarEvents!

> GET /appointments
> WebTestClient-Request-Id: [1]

No content

< 200 OK OK
< Content-Type: [application/json;charset=UTF-8]
< Content-Length: [377]

{"data":{"calendarEvents":[{"id":null,"startTime":"2020-01-16T13:19:37.510-06:00","endTime":"2020-01-16T14:19:37.511-06:00","timeZoneStart":"America/Regina","timeZoneEnd":"America/Regina","summary":"unit test summary","description":"unit test description","organizerName":"Developer","organizerEmail":"developer@dev.com","status":null,"alarm":15}]},"notifications":null}

注释的代码给出了相同的结果。需要明确的是,DTO 本身不为空;问题是calendarEvents数组。我可能做错了什么,因为我一般是响应式(Reactive)编程的新手,所以代码改进是最受欢迎的。我是否以错误的方式提取数据?

最佳答案

在断言任何类型的通量时,您应该使用步骤 validator 。将使您的生活更轻松。

    final Flux<String> responseBody = testClient.get()
.exchange()
.expectStatus()
.isOk()
.returnResult(String.class)
.getResponseBody();

StepVerifier.create(responseBody)
.assertNext(s -> assertEquals(s, "Foo"))
.assertNext(s -> assertEquals(s, "Bar"));

关于java - 使用 Spring WebFlux 测试时,DTO 的内部列表为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59775717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com