#副標=開放原始碼專案管理工具 #大標=Maven協同DbUnit實作資料庫單元測試 #眉標=Maven #作者=文/盧建州 ============程式1 User.java============ …以上省略… /** * @hibernate.class table="app_user" */ public class User implements Serializable { private Long id; private String username; private String password; private Set address = new HashSet(); private Set roles = new HashSet(); …中間省略… /** * @hibernate.set * cascade="save-update" lazy="false" * @hibernate.collection-key * column="user_id" * @hibernate.collection-one-to-many * class="demo.model.Address" */ public Set getAddress() { return address; } public void addAddress(Address address){ this.getAddress().add(address); } /** * @hibernate.set * table="user_role" * cascade="save-update" lazy="false" * @hibernate.collection-key * column="user_id" * @hibernate.collection-many-to-many * class="demo.model.Role" column="role_id" */ public Set getRoles() { return roles; } public void addRole(Role role){ this.getRoles().add(role); } …省略所有set與get method… } ============程式1 end============ ===========程式2 UserDaoImpl.java=========== …以上省略… public class UserDaoImpl extends HibernateDaoSupport implements UserDao { public User getUser(Long userId) { User user = (User) getHibernateTemplate() .get(User.class, userId); if (user == null) { throw new ObjectRetrievalFailureException( User.class, userId ); } return user; } public void saveUser(User user) { getHibernateTemplate().saveOrUpdate(user); getHibernateTemplate().flush(); } public void removeUser(Long userId) { getHibernateTemplate().delete(getUser(userId)); } } =================程式2 end================ =========box程式3 BaseDaoTestCase.java=========== …以上省略… public class BaseDaoTestCase extends AbstractTransactionalDataSourceSpringContextTests { protected String[] getConfigLocations() { setAutowireMode(AUTOWIRE_BY_NAME); return new String [] { "classpath*:applicationContext-*.xml" }; } } ===================程式3 end==================== ============程式4 UserDaoTest.java=============== …以上省略… public class UserDaoTest extends BaseDaoTestCase{ private UserDao userDao; private RoleDao roleDao; …省略set method… public void testGetUserInvalid() throws Exception { try { userDao.getUser(new Long(9999)); fail("指定ID的User不存在,此處為錯誤…"); } catch (DataAccessException d) { assertTrue(d != null); } } public void testGetUser() throws Exception { User user = userDao.getUser(new Long(1002)); assertNotNull(user); assertEquals(user.getAddress().size(),3); assertEquals(user.getRoles().size(),1); } public void testUpdateUser() throws Exception { Long testId = new Long(1002); User user = userDao.getUser(testId); //加入新的Address資訊 Address address = new Address(); address.setUser(user); …省略其他setXXX… user.addAddress(address); userDao.saveUser(user); user = userDao.getUser(testId); //重新取得資料驗證是否正確加入 assertEquals(user.getAddress().size(),4); } public void testAddUserRole() throws Exception { //對指定的User加入Role User user = userDao.getUser(new Long(1001)); assertEquals(1, user.getRoles().size()); Role role = roleDao.getRoleByName("user"); user.addRole(role); userDao.saveUser(user); assertEquals(2, user.getRoles().size()); //測試重覆加入Role的結果 user.addRole(role); userDao.saveUser(user); assertEquals( "more than 2 roles", 2, user.getRoles().size() ); //對指定的User刪除Role user.getRoles().remove(role); userDao.saveUser(user); assertEquals(1, user.getRoles().size()); } …省略其他測試… } ===============程式4 end==============