使用 mockito 登录页面 Junit 测试

Login page Junit test with mockito

我想这是个简单的问题,但我无法理解它。这是 class 我需要为其编写测试用例

@Controller
@SessionAttributes
public class LoginController {


@RequestMapping(value = "/Login", method = RequestMethod.GET)
public ModelAndView displayLogin(@RequestParam(value = "error", required = false) String error,
                                 @RequestParam(value = "logout", required = false) String logout,
                                 HttpServletRequest request,
                                 HttpServletResponse response) {

    ModelAndView modelForLogin = new ModelAndView();

    if (error != null) {

        // Include login failure message
        modelForLogin.addObject("loginFailure", "Invalid username and password!");

    }

    if ("user".equals(logout)) {

        // Include logout message
        modelForLogin.addObject("msg", "You've been logged out successfully.");
    }

    else {

        modelForLogin.addObject("msg","");
    }


    modelForLogin.setViewName("Login");

    return modelForLogin;

}

}

这是我到现在为止得到的...

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration({ " servlet-xml "})

public class LoginControllerTest {


@Mock HttpServletRequest request;
@Mock HttpServletResponse response;
@Mock HttpSession session;


private MockMvc mockMvc;

@Before
 protected void setUp() throws Exception {
   MockitoAnnotations.initMocks(this);
   ModelAndView modelForLogin = mockito.mock(ModelAndView.class);
   mockito.when(modelForLogin.error()).thenReturn("error");
   mockito.when(modelForLogin.logout()).thenReturn("logout");

 }

@Test
public void TestLoginError() throws Exception {

    mockMvc.perform(get("/Login").param()).andExpect(status().isOk()).andExpect(model().attributeExists("msg"));


}



@Test
public void testLogin() throws Exception {

    mockMvc.perform(get("/Login")).andExpect(status().isOk());
    mockMvc.perform(get("/Login").param("logout", "log")).andExpect(status().isOk()).andExpect(model().attributeExists("msg"));
    mockMvc.perform(get("/Login").param("error", "log")).andExpect(status().isOk()).andExpect(model().attributeExists("error"));
    mockMvc.perform(get("/Login").param("logout", "log").param("error", "log")).andExpect(status().isOk()).andExpect(model().attributeExists("msg")).andExpect(model().attributeExists("error"));
    mockMvc.perform(get("/Login")).andExpect(status().isOk()).andExpect(view().name("login"));
}

}

谁能告诉我为此编写测试用例的正确方法?

鉴于您拥有的代码,无需模拟。示例测试用例如下所示:

ModelAndView mvw =  displayLogin("error", null, null, null);
assertEquals("Invalid username and password!", mvw.getModelMap().get("loginFailure"));