gpt4 book ai didi

java - 如何将 BindingResult 作为请求参数传递?

转载 作者:行者123 更新时间:2023-11-30 09:17:02 25 4
gpt4 key购买 nike

我想通过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 使用一堆 HandlerMethodArgumentResolverRequestMappingHandlerMappingHandlerMethod 实例等来处理到达 的请求>DispatcherServlet。模拟 BindingResult 很可能意味着必须模拟或继承所有这些。

关于java - 如何将 BindingResult 作为请求参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19181646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com