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

Java 如何在SpringMVC中只测试控制器方法可用的特定http请求方法?,java,spring,http,spring-mvc,spring-test,Java,Spring,Http,Spring Mvc,Spring Test,我需要检查是否只有特定的http方法可用于某些url。 例如,如果有这样一个控制器 @Controller public class FooController { @RequestMapping(value = "bar", method = RequestMethod.GET) public void bar() {/*do something*/}; ... } @Test public void testBar() throws Exception {

我需要检查是否只有特定的http方法可用于某些url。 例如,如果有这样一个控制器

@Controller
public class FooController {
    @RequestMapping(value = "bar", method = RequestMethod.GET)
    public void bar() {/*do something*/};
    ...
}
@Test
public void testBar() throws Exception {
    mockMvc.perform(post("bar").session(session))
    .andExpect(/*some application's default error response*/);
}
对于控制器测试,我使用junit(4.10)、spring测试(3.2.10)和easymock(3.1)。 如果我这样写测试

@Controller
public class FooController {
    @RequestMapping(value = "bar", method = RequestMethod.GET)
    public void bar() {/*do something*/};
    ...
}
@Test
public void testBar() throws Exception {
    mockMvc.perform(post("bar").session(session))
    .andExpect(/*some application's default error response*/);
}
它将通过(尽管测试调用post方法,而不是get方法)

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

  • 使用错误的请求方法编写测试,但检查资源不可用
  • 将自定义异常解析程序添加到进程org.springframework.web.HttpRequestMethodNotSupportedException:不支持请求方法“\uuuuuu”,并返回相同的应用程序默认错误响应,但不允许使用https状态405方法
您有什么建议以及如何签入控制器测试请求方法


提前感谢。

您需要检查所有请求方法的状态,您可以使用
状态()检查
。isMethodNotAllowed()
状态()。isNotFound()
取决于您的需要:

示例:

  • get
    mockMvc.perform(get(“bar”).andExpect(status().isNotFound())
    mockMvc.perform(get(“bar”).andExpect(status().ismethodnotalowed())
put
delete
,….执行相同的操作