Ich bin sehr neu zu Mockito und Junit. Ich arbeite an der Erstellung von Testfall für Passwort vergessen Workflow. Unten ist der Code für Controller und Test. Könnte mir jemand sagen, wie ich auf Bindungsresultat prüfen sollte?Mock BindingResult in Einheit Testfall, wenn Benutzer nicht existiert
@RequestMapping(value = "/user/public/forgotPassword", method = RequestMethod.POST)
public ModelAndView sendforgetPasswordLink(@ModelAttribute ForgetPasswordBean forgetPasswordBean,BindingResult result, HttpSession session) {
BreadCrumbBuilder.addLinktoBreadCrumb(session, new Link(Constants.FORGET_PASSWORD_TITLE, "/user/public/forgotPassword", Constants.GROUP_USER, 0));
Map<String, String> breadCrumbs = HomePageController.setupInitialBreadCrumbs(session);
breadCrumbs.put(Constants.FORGET_PASSWORD_TITLE, "/user/public/forgotPassword");
session.setAttribute(SessionAttributes.BREAD_CRUMBS,breadCrumbs);
ModelAndView mav = new ModelAndView();
mav.addObject("displayTitle", Constants.FORGET_PASSWORD_TITLE);
PublicUser user = publicUserService.findPublicUserByEmail(forgetPasswordBean.getEmail().toLowerCase());
if(user == null) {
result.reject("email", "An account does not exist for this email.");
mav.setViewName("publicuser/forgetPassword.jsp");
return mav;
}
String randomId = java.util.UUID.randomUUID().toString();
user.setTempId(randomId);
mailService.sendForgetPasswordLink(user);
publicUserService.savePublicUser(user);
String msg = "Password reset instructions have been sent to your email.";
mav.addObject("msg", msg);
mav.setViewName("message.jsp");
return mav;
}
Dies ist Test, den ich bisher erstellt
@Test
public void TestForgetPasswordForNoUserFound() throws Exception {
final String input_email = "[email protected]";
ForgetPasswordBean forgetPasswordBean = new ForgetPasswordBean();
forgetPasswordBean.setEmail(input_email);
PublicUser daoUser = new PublicUser();
daoUser.setEmail(input_email);
when(mockPublicUserService.findPublicUserByEmail(input_email)).thenReturn(null);
when(mockBindingResult.hasErrors()).thenReturn(true);
final ModelAndView modelAndView = controller.sendforgetPasswordLink(forgetPasswordBean, mockBindingResult, mockHttpSession);
ModelMap modelMap = modelAndView.getModelMap();
assertEquals("An account does not exist for this email.", modelMap.get(mockBindingResult));
assertEquals("publicuser/forgetPassword.jsp", modelAndView.getViewName());
assertModelAttributeValue(modelAndView, "displayTitle", Constants.FORGET_PASSWORD_TITLE);
}
Ich habe den Test durchgeführt. Es ist aufgrund von NullPointerException fehlgeschlagen. Die Spur ist zu lang ... also kann ich hier nicht posten. Weißt du, was diesen Fehler verursacht hat? Vielen Dank! –
Sie können mindestens die Zeile posten, in der "NullPointerException" steht. – alayor
‚java.lang.NullPointerException \t bei gov.hhs.cdelr.web.PublicUserController.sendforgetPasswordLink (PublicUserController.java:410) \t bei gov.hhs.cdelr.web.PublicUserControllerTest.TestForgetPasswordForNoUserFound (PublicUserControllerTest.java:104) \t bei sun.reflect.NativeMethodAccessorImpl.invoke0 (native Methode) \t bei sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) \t bei sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) \t bei java.lang.reflect.Method.invoke (Methode.java:606) ' –