如何使用@PathVariable对Spring MVC控制器进行单元测试?
我有一个与此类似的简单带注释的控制器:
@Controllerpublic class MyController {
@RequestMapping("/{id}.html")
public String doSomething(@PathVariable String id, Model model) {
// do something
return "view";
}
}
我想用这样的单元测试来测试它:
public class MyControllerTest { @Test
public void test() {
MockHttpServletRequest request = new MockHttpServletRequest();
request.setRequestURI("/test.html");
new AnnotationMethodHandlerAdapter()
.handle(request, new MockHttpServletResponse(), new MyController());
// assert something
}
}
问题是AnnotationMethodHandlerAdapter.handler()方法引发异常:
java.lang.IllegalStateException: Could not find @PathVariable [id] in @RequestMappingat org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodInvoker.resolvePathVariable(AnnotationMethodHandlerAdapter.java:642)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolvePathVariable(HandlerMethodInvoker.java:514)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:262)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:146)
回答:
从Spring 3.2开始,有一种合适的方法可以轻松,优雅地进行测试。你将可以执行以下操作:
@RunWith(SpringJUnit4ClassRunner.class)@WebAppConfiguration
@ContextConfiguration("servlet-context.xml")
public class SampleTests {
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void setup() {
this.mockMvc = webAppContextSetup(this.wac).build();
}
@Test
public void getFoo() throws Exception {
this.mockMvc.perform(get("/foo").accept("application/json"))
.andExpect(status().isOk())
.andExpect(content().mimeType("application/json"))
.andExpect(jsonPath("$.name").value("Lee"));
}
}
以上是 如何使用@PathVariable对Spring MVC控制器进行单元测试? 的全部内容, 来源链接: utcz.com/qa/427523.html