如何将绑定结果作为请求参数传递



我想通过 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){
...

}

如何将绑定结果的模拟从测试方法传递到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 使用一堆HandlerMethodArgumentResolverRequestMappingHandlerMappingHandlerMethod 实例等来处理到达DispatcherServlet的请求。嘲笑一个BindingResult很可能意味着必须嘲笑或子类所有这些。

相关内容

  • 没有找到相关文章

最新更新