2017-05-18 1 views
1

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); 

} 

Antwort

2

Was Sie ist das Verhalten Ihres BindingResult überprüfen tun, indem Sie überprüfen, ob die reject Methode aufgerufen wurde.

Grundsätzlich statt

assertEquals("An account does not exist for this email.", modelMap.get(mockBindingResult)); 

können Sie die

folgende tun
Mockito.verify(mockBindingResult).reject("email", "An account does not exist for this email."); 

Und auf diese Weise können Sie überprüfen, ob die Methode aufgerufen wurde.

+0

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! –

+0

Sie können mindestens die Zeile posten, in der "NullPointerException" steht. – alayor

+0

‚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) ' –

Verwandte Themen