Ответ теста после ожидаемого исключения - PullRequest
0 голосов
/ 07 апреля 2020

Используя приведенный ниже тест (JUnit4), утверждения не вызываются. Это ожидаемое поведение? Я ожидаю, что будет сгенерировано ResponseStatusException, тест проверяет это, но затем я sh утверждаю ответ. Или же в качестве исключения выдается проверка, что содержание ответа недействительно?

@Test(expected = ResponseStatusException.class)
public void testResponse(){

    final Long ticketId = null

    when(service.getTicket(null))
            .thenThrow(new NullPointerException("ticketId cannot be null"));

    //Execute
    ResponseEntity<List<TicketResponse>> response = service.getTicket(null);

    assertEquals(HttpStatus.OK, response.getStatusCode());


}

1 Ответ

1 голос
/ 07 апреля 2020

Да, это нормально, хотя обратите внимание, что вы все равно не сможете проверить ответ, поскольку выдается исключение, поэтому вы не получите ответ! Однако вы можете проверить состояние исключения.

Для этого вы можете прочитать на странице «Exception Testing» официальной документации Junit 4 (код взят оттуда), где вы в основном используете assertThrows метод, а не @Test(expected=), который позволяет вам проводить больше проверок.

Другой альтернативой будет использование ExpectedException Rule. Снова, см. Ссылку для примера.

https://github.com/junit-team/junit4/wiki/Exception-testing

@Test
public void testExceptionAndState() {
  List<Object> list = new ArrayList<>();

  IndexOutOfBoundsException thrown = assertThrows(
      IndexOutOfBoundsException.class,
      () -> list.add(1, new Object()));

  // assertions on the thrown exception
  assertEquals("Index: 1, Size: 0", thrown.getMessage());
  // assertions on the state of a domain object after the exception has been thrown
  assertTrue(list.isEmpty());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...