使用MockRestServiceServer在RESTful控制器中抛出如何测试而不是IllegalArgumentException

时间:2014-11-17 01:32:25

标签: java spring rest junit4 assertions

我有一个非常简单的RESTful控制器,它生成一个json,我想测试它是否正常工作。 我可以在用户id存在时轻松测试该方法,没问题。 我想验证当给定的id不存在时抛出IllegalArgumentException。有没有办法做到这一点?

在应用程序中,当发生断言错误时,响应将重定向到显示通用消息的通用错误页面。 如果我使用响应(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);
}

此致 丹妮拉

2 个答案:

答案 0 :(得分:0)

为什么不抓住异常并创建日志并将异常写入日志。

答案 1 :(得分:0)

更新您的测试,如下所示。

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

请注意附加参数expected,它指定在测试执行时必须抛出的异常。

此外,还要声明异常消息,错误代码等,以创建自定义异常匹配器。请参阅我的答案以获取详细信息和伪代码。