在测试数据访问层的DAO代码时,如果连接真实的数据库会导致产生一些测试数据。应用HSQLDB在内存中建立一个同结构的数据库用来测试是个好主意。下面就针对使用Ibatis的DAO代码进行测试。
1. 下载HSQLDB 的jar文件。
2. 建立一个数据库描述文件
其中testfixture是可以更改的。
3. 建立一个PersistenceFixture.java
相应的DaoConfig.java代码
4. 然后就可以取得Dao进行测试了
1. 下载HSQLDB 的jar文件。
2. 建立一个数据库描述文件
java 代码
- driver=org.hsqldb.jdbcDriver
- url=jdbc:hsqldb:mem:testfixture
- username=sa
- password=
3. 建立一个PersistenceFixture.java
java 代码
- package com.yaoyuan.max.persistence;
- import java.io.PrintWriter;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.util.ResourceBundle;
- import com.ibatis.common.jdbc.ScriptRunner;
- import com.ibatis.common.resources.Resources;
- import com.ibatis.dao.client.DaoManager;
- import com.yaoyuan.max.persistence.ibatis.DaoConfig;
- public class PersistenceFixture {
- private static final DaoManager daoManager;
- static {
- try {
- ResourceBundle resource = ResourceBundle.getBundle("com/yaoyuan/max/persistence/database");
- DaoConfig daoConfig = new DaoConfig(
- "com/yaoyuan/max/persistence/database.properties");
- daoManager = daoConfig.getDaomanager();
- Class.forName(resource.getString("driver"));
- Connection conn = DriverManager.getConnection(
- resource.getString("url"),
- resource.getString("username"),
- resource.getString("password"));
- try {
- ScriptRunner runner = new ScriptRunner(conn,true,true);
- runner.setErrorLogWriter(new PrintWriter(System.out));
- runner.setLogWriter(new PrintWriter(System.out));
- runner.runScript(Resources
- .getResourceAsReader("ddl/hsql/schema.sql"));
- } finally {
- conn.close();
- }
- } catch (Exception e) {
- throw new RuntimeException("Description. Cause: " + e, e);
- }
- }
- public static DaoManager getDaoManager() {
- return daoManager;
- }
- }
相应的DaoConfig.java代码
java 代码
- /**
- *
- */
- package com.yaoyuan.max.persistence.ibatis;
- import java.io.Reader;
- import java.util.Properties;
- import com.ibatis.common.resources.Resources;
- import com.ibatis.dao.client.DaoManager;
- import com.ibatis.dao.client.DaoManagerBuilder;
- /**
- * @author Yao Yuan
- *
- */
- public class DaoConfig {
- private final DaoManager daoManager;
- public DaoConfig(String propertyFilePath) {
- try {
- String resource = "com/yaoyuan/max/persistence/ibatis/dao.xml";
- Reader reader = Resources.getResourceAsReader(resource);
- Properties props = Resources.getResourceAsProperties(propertyFilePath);
- daoManager = DaoManagerBuilder.buildDaoManager(reader,props);
- } catch (Exception e) {
- e.printStackTrace();
- throw new RuntimeException(
- "Could not initialize DaoConfig. Cause: " + e);
- }
- }
- /**
- *
- * @return
- */
- public DaoManager getDaomanager() {
- return daoManager;
- }
- }
4. 然后就可以取得Dao进行测试了
java 代码
- (CategoryDao)PersistenceFixture.getDaoManager().getDao(CategoryDao.class);