MockMvc在弹簧mvc控制器上

时间:2014-07-14 13:44:23

标签: spring model-view-controller mocking mockmvc

我的控制器中有以下代码:

@Controller
@RequestMapping(value="/my")
public class MyController  {

    @RequestMapping(value="/zone/{id}", method=RequestMethod.POST)
    public ModelAndView zone(@PathVariable Long id, @Valid MyFormBean formBean){

    System.out.println(formBean.getId());
    ModelMap mod = new ModelMap();
    mod.put("test", true);
    return new ModelAndView(myViewName, model);
    }
}

我的MyControllerTest类中的以下代码

public class MyControllerTest {
  @InjectMocks
  private MyController myController = new MyController();

  private MockMvc mockMvc = MockMvcBuilders.standaloneSetup(MyController).build();

  @Before
  public void setUp() {
    MockitoAnnotations.initMocks(this);
  }

  @Test
  public void myTest() {
     MyFormBean formBean = new MyFormBean();
     formBean.setId(5L);
     ModelAndView mav = new ModelAndView();

     int id = 10;

     try {
       MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/my/zone/" + id).param("formData", formData.toString())).andReturn();
     } catch(Exception e) {
       fail(e.getMessage());
     }
}

MyFormBean中的id字段使用@NotNull

注释

所以我尝试了各种各样的排列(requestAttr,sessionAttr等,而不是param和其他一些),我无法让它工作。最好我在@Valid子句上得到例外。其他时候测试将通过而不实际进入方法。

我尝试过几个示例,但无法通过我的特定方法签名找到任何内容。

感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

问题不在你的测试中,问题是你的主代码(控制器),因为url路径只映射到用@PathVariable注释的参数,而不是映射到表单对象!