SpringBootTest - тестировать исключение, когда запрос недействителен - PullRequest
0 голосов
/ 21 ноября 2018

Я разработал API с использованием web-flux, который работает нормально, когда я делаю запрос с помощью POSTMAN.Мой код:

Контроллер:

@PostMapping("/post", produces = ["application/xml"])
fun post(@Valid request: RequestData): Mono<Response> {
    return Mono.just(request)
    ...
    ...
    ...
}

dto:

data class RequestData(

    @get:NotBlank
    @get:Email
    val email: String = "",
)

Поэтому, когда я передаю недействительное письмо через POSTMAN, я ловлю исключение, как показано ниже, иего работа:

@ExceptionHandler
fun bindingExceptionHandler(e: WebExchangeBindException) = "Custom Error Message"

Но теперь, когда я пишу UT (@WebFluxTest) для этого случая (неверный адрес электронной почты), это не удалось.

@Test
fun testWhenInvalidEmail() {

    // Request body
    val email = "invalidemail"
    val request = LinkedMultiValueMap<String, String>()
    request.add("email", email)

    webTestClient.post().uri("/post")
        .body(BodyInserters.fromFormData(request))
        .exchange()
        .expectStatus().isOk
}

Когда я отлаживал это, я обнаружил, чтомое исключение Хандлер не входит в картину, когда запрос проходит через юнит тест.Я использую application/x-www-form-urlencoded тип контента в запросе POST.

Пожалуйста, дайте мне знать, где я делаю неправильно. Я тоже следил за этим вопросом, но не работал.

1 Ответ

0 голосов
/ 22 ноября 2018

Как уже упоминалось в другом связанном вопросе, это было исправлено в Spring Boot 2.1.0.

Кроме того, вам не нужно создавать WebTestClient самостоятельно, а вместо этого вводить его в свой тестовый класс ( см. Справочную документацию об этом ):

@RunWith(SpringRunner.class)
@WebFluxTest(MyValidationController.class)
public class MyValidationControllerTests {

    @Autowired
    private WebTestClient webClient;

    @Test
    public void testWhenInvalidEmail() {
        //...
    }

}
...