Junit結合Spring對Dao層進行單元測試
實際開發過程中,寫單元測試是非常難的一件事情,其主要原因是程式碼結構不夠好,導致單元測試不好寫。特別是Dao層,因為Dao層程式碼都是與資料庫相關的,所以我們在對Dao層程式碼進行單元測試的時候,不僅僅要考慮我在上篇文章中提到的程式碼隔離,還要注意單元測試不能帶來髒資料。另外,dao層例項依賴spring上下文,我們怎麼樣來解決這個問題?
看看下面的一個的測試例項:
public class SysEmployeeDaoTest { @Test public void deleteEmployee() { Employee employee = new Employee(); employee.setEmployeeCode(""+new Date().getTime()); employee.setEmployeeName("lisanlai"); employee.setDelFlag("0"); String empId = sysEmployeeDao.save(employee); Assert.assertNotNull("新增的員工ID為null",empId); //把該id對應的員工刪除 sysEmployeeDao.deleteEmployee(empId); //再用該ID去查資料庫,如果為空,說明刪除方法邏輯正確 Employee emp = sysEmployeeDao.get(empId); Assert.assertNotNull(emp); Assert.assertArrayEquals("deleteEmployee方法邏輯不正確,員工沒有被刪除", new String[]{"1"}, new String[]{emp.getDelFlag()}); //刪除員工物件 sysEmployeeDao.delete(emp); } @Test @Transactional @Rollback(true) public void saveEmployee() { Employee employee = new Employee(); employee.setEmployeeName("lisanlai"); String empCode = ""+new Date().getTime(); employee.setEmployeeCode(empCode); sysEmployeeDao.saveEmployee(employee); //通過code查詢員工 List emps = sysEmployeeDao.findByNamedParam( new String[]{"employeeCode"}, new String[]{empCode}); Assert.assertTrue("saveEmployee方法邏輯錯誤,員工儲存失敗!", !emps.isEmpty()); } } |
注意類上的三個註解:
//指定測試用例的執行器 這裡是指定了Junit4 |