Как проверить, что IllegalArgumentException вызывается в контроллере RESTful с помощью MockRestServiceServer

У меня есть очень простой контроллер RESTful, который создает json, и я хочу проверить, работает ли он нормально. Я могу легко протестировать метод, когда существует идентификатор пользователя, с этим проблем нет. Я хотел бы проверить, что IllegalArgumentException выдается, когда данный идентификатор не существует. Есть ли способ сделать это?

В приложении при возникновении ошибки утверждения ответ перенаправляется на общую страницу ошибки, которая отображает общее сообщение. Если я использую response(withStatus(HttpStatus.NOT_FOUND)), я не проверяю ни исключение, ни свое сообщение. Кто-нибудь может мне помочь?

Это метод, который я хочу проверить:

@Transactional (readOnly = true)
@RequestMapping(method=RequestMethod.GET, value="/json/user/{id}",  headers="Accept=application/json, text/html")
public @ResponseBody UserData getUserJson(@PathVariable Long id)
{
    User user = this.userService.findUserById(id);
    Assert.notNull(user , "User does not exist with the given id: " + id);
    return new UserData (user);
}

Это тест с действительным идентификатором:

@Test
public void testRestUserJson() {

mockServer.expect(requestTo(JSON_URL + USER)).andExpect(method(HttpMethod.GET))
          .andRespond(withSuccess(JSON_RESPONSE, MediaType.APPLICATION_JSON));


UserData userData = restClientTemplate.getForObject(JSON_URL + USER, UserData.class);
AssertResponseContent(userData , expectedData);

mockServer.verify();
EasyMock.verify(user);
}

С уважением, Даниэла


person Daniela    schedule 17.11.2014    source источник


Ответы (2)


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

person neo    schedule 17.11.2014
comment
Я вынужден добавить ответ при использовании MockRestServiceServer: mockServer.expect(something)andRespond(something). Я не могу просто поймать исключение, потому что я получу ответ, установленный в методе, и этот метод не принимает классы исключений... - person Daniela; 17.11.2014

Обновите свой тест, как показано ниже.

@Test(expected = IllegalArgumentException.class)
public void testRestUserJson() { ... }

Обратите внимание на дополнительный параметр expected, который указывает исключение, которое должно быть выдано при выполнении теста.

Кроме того, чтобы подтвердить сообщение об исключении, код ошибки и т. д., создайте собственное средство сопоставления исключений. Обратитесь к моему ответу за подробностями и псевдокодом.

person Bond - Java Bond    schedule 17.11.2014
comment
У меня проблема в том, что я не знаю, что добавить в ответ фиктивного сервера, чтобы ответить с исключением. mockServer.expect(requestTo(JSON_URL + USER)).andExpect(method(HttpMethod.GET)) .andRespond(withSuccess(JSON_RESPONSE, MediaType.APPLICATION_JSON)); Я не могу издеваться над запросом без ответа, и если вместо использования успешного ответа я использую недействительный ответ или ошибку, я получу это исключение вместо IllegalArgument. - person Daniela; 17.11.2014