Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringMVC控制器的Junit_Java_Spring_Spring Mvc_Junit - Fatal编程技术网

Java SpringMVC控制器的Junit

Java SpringMVC控制器的Junit,java,spring,spring-mvc,junit,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";

我有一个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;
}
@PreAuthorize(“isAuthenticated()”)
@RequestMapping(value=“/admin/edit_admin”,method=RequestMethod.GET)
公共字符串editAdmin(模型,HttpServletRequest){
字符串returnPage=“创建\管理”;
if(request.getParameter(“login”)!=null){
试一试{
List userList=adminDAO.getAdminByLogin(请求
.getParameter(“登录”);
if(userList.size()==1)
addAttribute(“ADMIN_USER”,userList.get(0));
returnPage=“编辑\管理”;
}捕获(异常错误){
returnPage=“编辑\管理”;
}
}
返回页面;
}
DAO类:
公共列表getAdminByLogin(字符串登录)引发SQLException{
List userList=new ArrayList();
String sql=“从管理员用户中选择*,其中登录=?”;
列表结果=jdbcTemplate
.queryForList(sql,登录);
AdminUserRowMapper rowMapper=新的AdminUserRowMapper();
用于(映射:结果){
AdminUser aUser=(AdminUser)rowMapper.mapRow(map);
userList.add(aUser);
}
返回用户列表;
}
我需要为控制器和DAO编写Junit测试类。 我首先尝试为controller编写Junit测试:

@Test
public void editAdmin() throws SQLException {
    AdminUserDAO adminDAO = new AdminUserDAO();
    List<AdminUser> userList = adminDAO.getAdminByLogin("1234");
}
@测试
public void editAdmin()引发SQLException{
AdminUserDAO adminDAO=新的AdminUserDAO();
List userList=adminDAO.getAdminByLogin(“1234”);
}
但当我运行这个类时,会在DAO类中抛出NullpointerException。 有人能帮我为Controller和DAO编写Junit测试类吗。 我不能使用MockMvc,因为我使用的Spring框架不兼容。

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

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

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