我正在尝试在单元测试中使用.andExpect(model().attributeHasFieldErrors
。
根据this page java.lang.AssertionError:导致没有属性abc的绑定结果,因为被测试的控制器返回的视图是重定向:“ redirect:/ xyz / add”。
但是同时,@PostMapping(/...)
中的大多数使用重定向。这是否意味着在这种情况下无法知道attributeHasFieldErrors
吗?
[似乎有可能-在此sample中似乎有效-但对此我感到困惑:
有testProcessUpdateOwnerFormHasErrors
测试方法(位于上面链接底部的第二种方法)执行POST [ i.e. mockMvc.perform(post(... ]
,并期望由Controller类中的GET方法返回的视图名称。
即,在控制器中@GetMapping("/owners/{ownerId}/edit")
返回"owners/createOrUpdateOwnerForm"
,@PostMapping("/owners/{ownerId}/edit")
返回"redirect:/owners/{ownerId}"
。在执行POST的测试中,期望值"owners/createOrUpdateOwnerForm"
以上。它不应该期望"redirect:/owners/{ownerId}"
吗?
我很困惑。
有人可以解释实现attributeHasFieldErrors
的正确方法吗?
类似:
@PostMapping("/")
public String processForm(@Valid UserForm userForm, BindingResult bindingResult, Model model) {
if ( ! bindingResult.hasErrors()) {
Long id = service.saveUser(userForm.getUser());
return "redirect:/user/"+id;
} else {
return "calcForm";
}
}