Я пробую Spring WebFlux, используя контроллер аннотаций и встроенный mongodb (JDK11).Я пытаюсь написать @WebFluxTest
для моей @RestController
, в частности, @PostMapping
порции.
Это просто базовая настройка с @RestController
и @Repository
.
Inмой @RestController
:
@RestController
@RequestMapping("/address")
@AllArgsConstructor
public class AddressController {
private final AddressRepository addressRepository;
@ResponseStatus(HttpStatus.CREATED)
@PostMapping(value = "/create")
public Flux<Address> create(@RequestBody Flux<Address> address) {
return address.flatMap(this.addressRepository::save);
}
}
В моем тесте:
@ExtendWith(SpringExtension.class)
@WebFluxTest(AddressController.class)
public class AddressControllerTest {
@Autowired
private WebTestClient webTestClient;
@MockBean
private AddressRepository addressRepository;
@Test
@DisplayName("Create")
public void create() {
Flux<Address> addresses = Flux.just("Hello").map(add ->
Address.builder().id("5bf907ff2e21d401d4054a4d").street(add).build());
Address add = Address.builder().id("5bf907ff2e21d401d4054a4d").street("Hello").build();
when(this.addressRepository.saveAll(addresses)).thenReturn(addresses);
this.webTestClient
.post()
.uri("/address/create")
.body(addresses, Address.class)
.exchange()
.expectStatus().isCreated()
.expectHeader().contentType(MediaType.APPLICATION_JSON_UTF8)
.expectBody(Address.class).isEqualTo(add);
}
}
И очень простое POJO:
@Data
@Builder
@Document
@AllArgsConstructor
@NoArgsConstructor
public class Address {
@Id
private String id;
private String street;
}
Вопрос:
Я хочу иметь возможность создать конечную точку, чтобы разрешить создание адреса 0..*
.
Как правильно написать модульный тест, чтобы я мог mock
позвонить в create()
?Если я сделаю
when(this.addressRepository.save(add)).thenReturn(addresses);
тогда, это будет Mono
Но если я сделаю
when(this.addressRepository.saveAll(addresses)).thenReturn(addresses);
, тогда это не mocking
правильный вызов метода в create()
.
Как правильно написать этот модульный тест?
Спасибо!Если я не предоставил достаточно информации, пожалуйста, дайте мне знать.
Обновление: я могу create
, используя Postman
к моей /address/create
конечной точке.