JUnit 5 @WebFluxTest тест для Flux @PostMapping с использованием WebTestClient - PullRequest
0 голосов
/ 24 ноября 2018

Я пробую 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 конечной точке.

...