如何只测试Spring MVC中控制器方法可用的特定http请求方法?

时间:2016-10-05 08:18:33

标签: java spring http spring-mvc spring-test

我需要检查某些网址是否只有特定的http方法。 例如,如果有这样的控制器

@Controller
public class FooController {
    @RequestMapping(value = "bar", method = RequestMethod.GET)
    public void bar() {/*do something*/};
    ...
}

对于控制器测试,我使用junit(4.10),spring-test(3.2.10)和easymock(3.1)。 如果我像这样写测试

@Test
public void testBar() throws Exception {
    mockMvc.perform(post("bar").session(session))
    .andExpect(/*some application's default error response*/);
}

它将通过(尽管测试调用post-method,而不是get-method)。

所以我正在寻找一种正确的方法来确保我的其余资源只能通过文档中指定的请求方法获得。我想到了两个解决方案:

  • 使用错误的请求方法编写测试并以某种方式检查资源不可用
  • 添加自定义异常解析程序以处理org.springframework.web.HttpRequestMethodNotSupportedException:请求方法' __'不支持并返回相同的应用程序默认错误响应,但使用https状态405方法不允许。

您会建议什么以及如何检查控制器测试请求方法?

提前致谢。

1 个答案:

答案 0 :(得分:3)

您需要检查所有请求方法的状态,您可以使用andExpect status().isMethodNotAllowed()status().isNotFound()来执行此操作,具体取决于您的需求:

示例:

  • 获取mockMvc.perform(get("bar").andExpect(status().isNotFound())mockMvc.perform(get("bar").andExpect(status().isMethodNotAllowed())

putdelete,....

执行相同的操作