小编mar*_*ner的帖子

如何使用@PathVariable对Spring MVC控制器进行单元测试?

我有一个类似于这个的简单注释控制器:

@Controller
public class MyController {
  @RequestMapping("/{id}.html")
  public String doSomething(@PathVariable String id, Model model) {
    // do something
    return "view";
  }
}
Run Code Online (Sandbox Code Playgroud)

我想用这样的单元测试来测试它:

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
  }
}
Run Code Online (Sandbox Code Playgroud)

问题是AnnotationMethodHandlerAdapter.handler()方法抛出异常:

java.lang.IllegalStateException: Could not find @PathVariable [id] in @RequestMapping
at 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)
Run Code Online (Sandbox Code Playgroud)

java spring unit-testing spring-mvc spring-test

52
推荐指数
3
解决办法
8万
查看次数

标签 统计

java ×1

spring ×1

spring-mvc ×1

spring-test ×1

unit-testing ×1