2015-01-10 52 views
0

我有一個春天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; 
} 

我需要編寫JUnit測試類,兩個控制器和DAO。 我第一次嘗試編寫JUnit測試控制器:

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

但是當我運行這個類,我得到NullPointerException異常的DAO類拋出。 有人可以幫我編寫Controller和DAO的Junit測試類。 我不能使用MockMvc,因爲我使用的是不兼容的Spring框架。

回答

0

首先,測試控制器是不是這樣一個好主意。控制器只是一個傳送機制,你想要真正測試的是「getAdminByLogin」用例。你的控制器方法editAdmin()最好應該調用服務類的editAdmin()作爲你的用例。

您的測試應直接使用服務類,即注入AdminUserDAO的模擬,然後調用服務類的editAdmin()。最後,您可以驗證模擬了您感興趣的任何交互,例如 -

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