我有一个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框架不兼容。
答案 0 :(得分:0)
首先,测试控制器不是一个好主意。控制器只是一个传递机制,你真正要测试的是“getAdminByLogin”用例。理想情况下,您的控制器方法editAdmin()应该调用服务类的editAdmin()作为您的用例。
您的测试应直接使用服务类,即注入AdminUserDAO的模拟,然后调用服务类的editAdmin()。最后,您可以验证模拟您感兴趣的任何交互,例如 -
Mockito.verify(mockAdminDAO).getAdminByLogin("1234");