Java SpringMVC控制器的Junit
我有一个spring MVC应用程序,其中一个控制器具有以下方法: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";
@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");