作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想通过MockMvc测试这个方法
@RequestMapping("/saveCandidate")
public String saveCandidate(
Model model,
@ModelAttribute("candidateFromRequest") @Validated() Candidate candidateFromRequest,
BindingResult result,
@ModelAttribute("skillsIdList") Set<Skill> skills,
@ModelAttribute("vacanciesForCandidate") Set<Vacancy> vacanciesForCandidate,
@ModelAttribute("eventsForCandidate") Set<Event> eventsForCandidate,
RedirectAttributes redirectAttributes){
...
}
如何将测试方法的 BindingResult 结果模拟传递给 saveCandidate
方法?
我的测试方法:
@Test
public void saveCandidateWithErrors() throws Exception{
BindingResult result= mock(BindingResult.class);
when(result.hasErrors()).thenReturn(true);
when(candidateService.findByName(anyString())).thenReturn(new ArrayList<Candidate>());
MockHttpServletRequestBuilder request = MockMvcRequestBuilders.get("/saveCandidate");
if(result.hasErrors())
//how test code that writing here?
}
else{
//I always hit it here
}
}
我想设置为请求我的模拟结果
最佳答案
你不能(你可以,但不值得这么麻烦)。 BindingResult
是 Spring 在创建您的命令对象时创建的对象,并在它调用您的 saveCandidate
处理程序方法时传递它。
你不应该测试 Spring 提供的类和对象,你应该测试当你输入正确或错误的请求参数时它们是如何解析的。
解释为什么不值得:
Spring 使用一堆 HandlerMethodArgumentResolver
、RequestMappingHandlerMapping
和 HandlerMethod
实例等来处理到达 的请求>DispatcherServlet
。模拟 BindingResult
很可能意味着必须模拟或继承所有这些。
关于java - 如何将 BindingResult 作为请求参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19181646/
我是一名优秀的程序员,十分优秀!