Исключение doThrow не выбрасывает для пружины MVC модульный тест? - PullRequest
0 голосов
/ 17 января 2020

я попытался переключиться на when () и получить ошибки компилятора

я успешно использовал doThrow (...) в другом тесте в том же проекте, поэтому я не знаю, что здесь происходит

Код модульного теста:

doThrow(new Exception("the client cancelled the request, ya dingus!")).when(handler).write(any());

MvcResult result = mockMvc.perform(post("/myPath")
            .content(String.valueOf(mockValidRequest))
            .contentType(MediaType.APPLICATION_JSON)
            .characterEncoding("utf-8"))
            .andExpect(status().is5xxServerError())
            .andReturn();

Код, который я тестирую (метод обработчика для / myPath):

@PostMapping("/myPath")
public ResponseEntity<String> handleRequest(@RequestBody MyPojo request) {
 try {
        handler.write(request);
    } catch (Exception e) {
        return new ResponseEntity<>("Exception thrown during event processing: " + e, HttpStatus.SERVICE_UNAVAILABLE);
    }

return new ResponseEntity<>("Success", HttpStatus.OK)
}

Проблема в том, что тест говорит, что фактический результат - 200 успешных , когда должно было произойти исключение, и служба 5xx недоступна.

Ответы [ 2 ]

1 голос
/ 17 января 2020

я обнаружил, что могу заставить тесты пройти вызов функции напрямую ... просто кажется, что Mock Mvc не включает в себя логику doThrow c

пересмотренный модульный тест:

doThrow(new Exception("some error")).when(handler).sendToSqsWriter(any());

ResponseEntity<String> response = controller.handleRequest(new Gson().fromJson(new JSONObject(mockApptRequestBody);.toString(), SeamAppointmentRequest.class));

assertTrue(response.toString().contains("some error"));
assertTrue(response.getStatusCodeValue() == 503);

все json / gson jazz устраняют ошибки синтаксического анализа во время выполнения

0 голосов
/ 18 января 2020

Итак, я нашел правильный ответ на свой вопрос:

У меня не было этого фрагмента в моем исходном посте, но handler создавался в тесте следующим образом:

@Mock
EventHandler handler;

это должно было быть:

@MockBean 
EventHandler handler;

Я предполагаю, что @MockBean - это макет пружины, а @Mock от Mockito, он, вероятно, высмеивал обработчик событий, который был создан вне Spring. контейнер. Таким образом, почему я не думал, что это поднимает doThrow ... это действительно поднимало это, но шпионило за неправильным экземпляром.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...