我的控制器中有以下代码:
@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子句上得到例外。其他时候测试将通过而不实际进入方法。
我尝试过几个示例,但无法通过我的特定方法签名找到任何内容。
感谢任何帮助,谢谢。
答案 0 :(得分:0)
问题不在你的测试中,问题是你的主代码(控制器),因为url路径只映射到用@PathVariable
注释的参数,而不是映射到表单对象!