【问题标题】:What to check when testing controllers in Spring在 Spring 中测试控制器时要检查什么
【发布时间】:2016-04-14 06:18:58
【问题描述】:

我正在使用 MockMvc 在简单的 Spring 应用程序中测试控制器。这是我第一次尝试进行测试。根据我找到的资源,我成功地运行了我的测试,但我不确定要检查什么响应。我的控制器只返回要呈现的视图名称: 索引页面(包含菜单栏和欢迎文本)、产品页面(包含菜单栏和空的产品表)和关于页面(再次菜单栏和一些关于作者的信息)。 测试看起来像这样:

    mockMvc.perform(get("/myviews"))
    .andExpect(status().isOk())
    .andExpect(view().name("myviewsnames"))
    .andExpect(forwardedUrl("/WEB-INF/jsp/myviewsjsps.jsp"));

但基于 MockMvcResultMatchers 文档https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/test/web/servlet/result/MockMvcResultMatchers.html 我看到很多其他的匹配选项。还有什么,为什么,我应该检查我的测试?谢谢。

【问题讨论】:

  • 您可能还想测试异常处理。 Spring MVC 控制器可以将服务层抛出的异常转换为 HTTP 状态(例如错误请求、未经授权、未找到等)。然而,这可能对 Rest Controller 更有意义。

标签: spring spring-mvc testing controller


【解决方案1】:

实际上 MockMvc 是测试 RESTful Web 服务的好方法,您可以根据响应的标头、状态代码和响应正文来测试响应。对于您的用例,您可以根据某些请求条件(如果存在)来测试您的视图名称。

【讨论】:

  • 谢谢。稍后我也会实现 REST 控制器和测试。但我的意思是,即使我没有修改它,测试标题是否有意义?或者我应该检查适当的处理程序是否处理了我的请求?在带有 REST 控制器的示例中,我总是看到检查在测试期间是否没有调用其他模拟对象方法。为什么我们需要对此进行测试?
  • 不客气,想象一下你用 put 方法更新你的实体,所以你期望 Last-Modified 标题值应该改变,你在你的情况下测试它。您请求资源的 XML 表示,在支持这种 mime 类型的情况下,您希望您的响应 Content-Type 会改变,并且在不支持您的 mime 类型的情况下,您应该除了415 Unsupported Media Type 状态代码,实际上您测试您的代码基于您的用例以及您对代码的期望。
  • 非常感谢。你帮了我很多!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多