单元测试弹簧控制器中的响应状态码

时间:2011-10-25 11:39:36

标签: spring spring-mvc

我正在尝试在控制器

中对以下方法进行单元测试
  @ExceptionHandler(ExceptionName.class)
  @ResponseStatus(value=HttpStatus.INTERNAL_SERVER_ERROR)
  public String handleIOException(ExceptionName ex, HttpServletRequest request) {
    return "errors.messagepage";
  }

我可以测试返回的视图名称。

我还想测试响应状态代码。我怎么能这样做?

2 个答案:

答案 0 :(得分:5)

你不能,不能作为单元测试。注释是对框架的指令,不是可执行代码的一部分。

测试此问题的唯一方法是在测试中引导DispatcherServlet(实际上是集成测试),或部署应用程序并通过HTTP测试它。

如果您真的想在单元测试中执行此操作,请考虑手动设置HttpServletResponse上的响应代码,而不是使用注释:

@ExceptionHandler(ExceptionName.class)
public String handleIOException(ExceptionName ex, HttpServletRequest request, HttpServletResponse response) {
  response.setStatus(500)
  return "errors.messagepage";
}

答案 1 :(得分:0)

看看下面的博客。

Spring MVC: Integration Testing Controllers

详细介绍了如何在JUnit中设置模拟servlet上下文和WebApplicationContext。使用此设置,我可以使用控制器方法上的注释测试响应代码集。