当前位置: 首页 > 图文教程 > Java技术 > 数据库持久层 > 数据库持久层:为持久层编写单元测试
下面我们为持久层编写单元测试,使用Hibernat作为持久层。Hinbernate是一个O/R映像框架,用来关联java对象和数据库中的表(tables)。它使得对象的CRUD操作变得非常简单,Spring结合了Hibernate变得更加容易。从Hibernate转向Spring+Hibernate会减少75%的代码。这主要是因为,ServiceLocater和一些DAOFactory类的废弃,spring的实时异常代替了Hibernate的检测
式的异常。写一个单元测试有助于规范 UserDAO接口。为UserDAO写一个JUint测试程序,要完成以下几步:
1.在test/org/appfuse/dao下新建一个UserDAOTest.java类。它继承了同一个包中的
BaseDAOTestCase,其父类初始化了Spring的ApplictionContext(来自web/WEBINF/
applictionContext.xml),以下是JUnit测试的代码。
package org.appfuse.dao;
// use your IDE to handle imports
public class UserDAOTest extends BaseDAOTestCase {
private User user = null;
private UserDAO dao = null;
protected void setUp() throws Exception {
log = LogFactory.getLog(UserDAOTest.class);
dao = (UserDAO) ctx.getBean("userDAO");
}
protected void tearDown() throws Exception {
dao = null;
}
public static void main(String[] args) {
junit.textui.TestRunner.run(UserDAOTest.class);
}
}
这个类还不能编译,因为还没有UserDAO 接口。在这之前,来写一些来验证User的
CRUD操作。
2.为UserDAOTest类添加testSave和testAddAndRemove方法,如下:
public void testSaveUser() throws Exception {
user = new User();
user.setFirstName("Rod");
user.setLastName("Johnson");
dao.saveUser(user);
assertTrue("primary key assigned", user.getId() != null);
log.info(user);
assertTrue(user.getFirstName() != null);
}
public void testAddAndRemoveUser() throws Exception {
user = new User();
user.setFirstName("Bill");
user.setLastName("Joy");
dao.saveUser(user);
assertTrue(user.getId() != null);
assertTrue(user.getFirstName().equals("Bill"));
if (log.isDebugEnabled()) {
log.debug("removing user...");
}
dao.removeUser(user.getId());
assertNull(dao.getUser(user.getId()));
}
从这些方法中可以看到,你需要在UserDAO创建以下方法:
saveUser(User)
removeUser(Long)
getUser(Long)
getUsers() (返回数据库的所有用户)
3.在src/org/appfuse/dao目录下建一个名为UserDAO.java类的,输入以下代码:
tips:如果你使用eclipse,idea 之类的IDE,左边会出现在一个灯泡,提示类不存在,可以
即时创建。
package org.appfuse.dao;
// use your IDE to handle imports
public interface UserDAO extends DAO {
public List getUsers();
public User getUser(Long userId);
public void saveUser(User user);
public void removeUser(Long userId);
}
4.在src/org/appfuse/model下建一个User.java文件,添加几个成员变量:
id,firstName,lastName,如下。
package org.appfuse.model;
public class User extends BaseObject {
private Long id;
private String firstName;
private String lastName;
/* 用你熟悉的IDE来生成getters和setters,Eclipse中右击> Source -> Generate Getters
and Setters */
}
注意,你继承了BaseObject 类,它包含几个有用的方法:toString(),equlas(),hasCode(),
后两个是Hibernate必须的。建好User后,用IDE打开UserDAO和UserDAOTest两个类,
优化导入。
评论 (0) All