тестирование конечной точки Spring Webflux POST возвращает 404, а не 201 - PullRequest
0 голосов
/ 25 сентября 2019

Я создал простой API, который еще не реализует полный CRUD, но я нашел свою первую проблему.Все отлично работает, когда я запускаю свой API с swagger, но когда я запускаю тесты для методов Post, кажется, что он отклоняет мои запросы.

Tests:

@RunWith(SpringRunner.class)
@WebFluxTest(controllers = CustomerController.class)
@Import(CustomersService.class)
public class CustomerControllerTest {

    @MockBean(answer = Answers.RETURNS_DEEP_STUBS)
    private CustomersService mockedService;

    @Autowired
    private WebTestClient client;

    ...

    @Test
    public void endpointAddWhenGivenGoodJsonShouldReturn201() {
        //todo: fix test, it works in API.
        int id = -1;
        Customer customer1 = new Customer(id, "name", new Address("city", "street", "zcode"));


        Mockito
                .when(mockedService.addCustomer(customer1))
                .thenReturn(Mono.just(customer1));

        client.post()
                .uri("/api/add/")
                .accept(MediaType.APPLICATION_JSON_UTF8)
                .contentType(MediaType.APPLICATION_JSON_UTF8)
                .body(Flux.just(customer1), Customer.class)
                .exchange()
                .expectStatus().isCreated();
    }

    @Test
    public void endpointAddWhenGivenGoodJsonShouldReturn400() {

        int id = -1;
        Customer customer1 = new Customer(id, "name", new Address("city", "street", "zcode"));


        Mockito
                .when(mockedService.addCustomer(customer1))
                .thenReturn(Mono.empty());

        client.post()
                .uri("/api/add/")
                .accept(MediaType.APPLICATION_JSON_UTF8)
                .contentType(MediaType.APPLICATION_JSON_UTF8)
                .body(Mono.just(customer1), Customer.class)
                .exchange()
                .expectStatus().isBadRequest();
    }


}

оба теста, кажется, возвращают isNotFound ().

Класс обслуживания:

@Service
public class CustomersService implements CustomersServiceInterface {
    private final RepositoryInterface customersRepository;

    public CustomersService(RepositoryInterface customersRepository) {
        this.customersRepository = customersRepository;
    }

    public Flux<Customer> getCustomerById(int id) {
        return customersRepository.getById(id);
    }

    public Flux<Customer> getAllCustomers() {
        return customersRepository.getAll();
    }

    public Mono<Customer> addCustomer(Customer newCustomer) {
        return customersRepository.saveCustomer(newCustomer);
    }
}

, который является поддельным, поэтому хранилище не имеет значения.

Как я могу исправить тесты, чтобы увидеть, что делает API, поэтому возвращаем хорошеекоды состояния (201 и 400)?

...