当前位置: 首页 > 图文教程 > Java技术 > 数据库持久层 > 数据库持久层:为持久层编写单元测试

数据库持久层
数据库持久层:Hibernate中cascade和inverse的用法
数据库持久层:hibernate的配置信息
数据库持久层:谈hibernate的持续性
数据库持久层:小议Hibernate查询及数据检索
数据库持久层:浅谈hibernate中的Session
数据库持久层:小编浅谈hibernate中抓取策略
数据库持久层:iBATIS框架中Serializable可读写缓存及存储类型
数据库持久层:ibatis高级特性
数据库持久层:为持久层编写单元测试
数据库持久层:小编浅谈ibatis基础语义
数据库持久层:Hibernate中与关联有关的问题
数据库持久层:浅谈ORM(对象关系映射)
总结JDBC连接SQLServer的错误Error establishing socket
数据库持久层:iBATIS的OR 映射
数据库持久层:DAO和ODBC的相似之处
数据库持久层:小编浅谈DAO的特色
数据库持久层:小编浅谈XDoclet 与Hibernate 映射
数据库属性hibernate.dialect的设置

数据库持久层:为持久层编写单元测试


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 342 ::
收藏到网摘: n/a

下面我们为持久层编写单元测试,使用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,其父类初始化了SpringApplictionContext(来自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类添加testSavetestAddAndRemove方法,如下:

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来生成getterssettersEclipse中右击> Source -> Generate Getters

and Setters */

}

注意,你继承了BaseObject 类,它包含几个有用的方法:toString(),equlas(),hasCode(),

后两个是Hibernate必须的。建好User后,用IDE打开UserDAOUserDAOTest两个类,

优化导入。