我必须对服务层进行单元测试,但由于不熟悉SpringMvc,所以我不知道该怎么做。
这是我要测试的方法:
@Override
public String update(String username, User newUserData, BindingResult result, Model model) {
if (result.hasErrors()) {
updateModelData(model, "", result.getAllErrors());
return HOME_VIEW_NAME;
}
User foundUser = this.userRepository.findByUsername(username);
if (foundUser == null) {
throw new UserNotFoundException(username);
}
String queryResult = String.format("UPDATED SUCCESSFULLY: \n Old User: %s", foundUser);
foundUser.setPassword(encryptPassword(newUserData.getPassword()));
foundUser.setStatus(newUserData.getStatus());
queryResult += String.format("New User: %s", foundUser);
this.userRepository.save(foundUser);
updateModelData(model, queryResult, new ArrayList<>());
return HOME_VIEW_NAME;
}
首先-我想知道保留Model
,BindingResult
并返回服务层中的页面是否是一个好主意?如果没有,为什么不呢?
第二-如何正确测试此方法?
谢谢!
答案 0 :(得分:2)
我认为最好在控制器中返回页面。我相信Spring开发人员创建了这样的注释@Component
,@Repository
,@Service
,@Controller
还将为特定组件所属的任何层提供上下文。您可以检查this discussion on SO regarding that。
关于第二个问题,您可能想查看Spring MVC test framework。您可能想查看MockMvc
,文档中以及Spring projects repository上都有大量引用。
如果要在更新后转到正确的 view 场景进行测试,您需要以下代码段:
MockMvc mockMvc;
mockMvc.perform(get("/path/to/update/resource"))
.andExpect(status().isOk())
.andExpect(modelAndView().getViewName().isEqualTo("your_view_name"));