Junit for Spring MVC Controller

时间:2015-01-10 17:43:01

标签: java spring spring-mvc junit

我有一个spring MVC应用程序,其中一个控制器有以下方法:

@PreAuthorize("isAuthenticated()")
@RequestMapping(value = "/admin/edit_admin", method = RequestMethod.GET)
public String editAdmin(Model model, HttpServletRequest request) {
    String returnPage = "create_admin";
    if (request.getParameter("login") != null) {
        try {
            List<AdminUser> userList = adminDAO.getAdminByLogin(request
                    .getParameter("login"));
            if (userList.size() == 1)
                model.addAttribute("ADMIN_USER", userList.get(0));
            returnPage = "edit_admin";
        } catch (Exception err) {
            returnPage = "edit_admin";
        }
    }
    return returnPage;
}

DAO Class:

public List<AdminUser> getAdminByLogin(String login) throws SQLException {
    List<AdminUser> userList = new ArrayList<AdminUser>();

    String sql = "select * from ADMIN_USER where login=?";
    List<Map<String, Object>> result = jdbcTemplate
            .queryForList(sql, login);

    AdminUserRowMapper rowMapper = new AdminUserRowMapper();
    for (Map<String, Object> map : result) {
        AdminUser aUser = (AdminUser) rowMapper.mapRow(map);
        userList.add(aUser);
    }
    return userList;
}

我需要为Controller和DAO编写Junit测试类。 我试着先为控制器编写Junit测试:

@Test
public void editAdmin() throws SQLException {
    AdminUserDAO adminDAO = new AdminUserDAO();
    List<AdminUser> userList = adminDAO.getAdminByLogin("1234");
}

但是当我运行这个类时,我在DAO类中抛出了NullpointerException。 可以帮我为Controller和DAO编写Junit测试类。 我不能使用MockMvc,因为我使用的Spring框架不兼容。

1 个答案:

答案 0 :(得分:0)

首先,测试控制器不是一个好主意。控制器只是一个传递机制,你真正要测试的是“getAdminByLogin”用例。理想情况下,您的控制器方法editAdmin()应该调用服务类的editAdmin()作为您的用例。

您的测试应直接使用服务类,即注入AdminUserDAO的模拟,然后调用服务类的editAdmin()。最后,您可以验证模拟您感兴趣的任何交互,例如 -

Mockito.verify(mockAdminDAO).getAdminByLogin("1234");