Java 如何在SpringMVC中只测试控制器方法可用的特定http请求方法?
我需要检查是否只有特定的http方法可用于某些url。 例如,如果有这样一个控制器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 {
@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
,….执行相同的操作