Spring控制器中的单元测试响应状态代码

发布于 2024-12-11 22:56:09 字数 327 浏览 0 评论 0原文

我正在尝试在控制器中对以下方法进行单元测试,

  @ExceptionHandler(ExceptionName.class)
  @ResponseStatus(value=HttpStatus.INTERNAL_SERVER_ERROR)
  public String handleIOException(ExceptionName ex, HttpServletRequest request) {
    return "errors.messagepage";
  }

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

我还想测试响应状态代码。我怎样才能做到这一点?

I am trying to unit test the following method in controller

  @ExceptionHandler(ExceptionName.class)
  @ResponseStatus(value=HttpStatus.INTERNAL_SERVER_ERROR)
  public String handleIOException(ExceptionName ex, HttpServletRequest request) {
    return "errors.messagepage";
  }

I can test for the returned view name.

I also want to test for the Response Status code. How can I do that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

从﹋此江山别 2024-12-18 22:56:09

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

对此进行测试的唯一方法是引导 DispatcherServlet 作为测试的一部分(实际上是集成测试),或者部署应用程序并通过 HTTP 进行测试。

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

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

You can't, not as a unit test. The annotation is an instruction to the framework, and isn't part of your executable code.

The only way to test this is to bootstrap a DispatcherServlet as part of your test (an integration test, really), or to deploy the application and test it over HTTP.

If you really want to do this in a unit test, then consider setting the response code on the HttpServletResponse manually, rather than using an annotation:

@ExceptionHandler(ExceptionName.class)
public String handleIOException(ExceptionName ex, HttpServletRequest request, HttpServletResponse response) {
  response.setStatus(500)
  return "errors.messagepage";
}
水水月牙 2024-12-18 22:56:09

看看下面的博客。

Spring MVC:集成测试控制器

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

Take a look at following blog.

Spring MVC: Integration Testing Controllers

It details setting up a mock servlet context and WebApplicationContext from within JUnit. Using this setup I am able to test Response Code set using annotation on the controller methods.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文