应用HSQLDB进行数据访问层测试

在测试数据访问层的DAO代码时,如果连接真实的数据库会导致产生一些测试数据。应用HSQLDB在内存中建立一个同结构的数据库用来测试是个好主意。下面就针对使用Ibatis的DAO代码进行测试。

1. 下载HSQLDB 的jar文件。
2. 建立一个数据库描述文件
java 代码
  1. driver=org.hsqldb.jdbcDriver  
  2. url=jdbc:hsqldb:mem:testfixture  
  3. username=sa  
  4. password=  
    其中testfixture是可以更改的。

3. 建立一个PersistenceFixture.java
java 代码
 
  1. package com.yaoyuan.max.persistence;  
  2.   
  3. import java.io.PrintWriter;  
  4. import java.sql.Connection;  
  5. import java.sql.DriverManager;  
  6. import java.util.ResourceBundle;  
  7.   
  8. import com.ibatis.common.jdbc.ScriptRunner;  
  9. import com.ibatis.common.resources.Resources;  
  10. import com.ibatis.dao.client.DaoManager;  
  11. import com.yaoyuan.max.persistence.ibatis.DaoConfig;  
  12.   
  13. public class PersistenceFixture {  
  14.     private static final DaoManager daoManager;  
  15.   
  16.     static {  
  17.         try {  
  18.             ResourceBundle resource = ResourceBundle.getBundle("com/yaoyuan/max/persistence/database");  
  19.               
  20.             DaoConfig daoConfig = new DaoConfig(  
  21.                     "com/yaoyuan/max/persistence/database.properties");  
  22.             daoManager = daoConfig.getDaomanager();  
  23.             Class.forName(resource.getString("driver"));  
  24.             Connection conn = DriverManager.getConnection(  
  25.                     resource.getString("url"),  
  26.                     resource.getString("username"),  
  27.                     resource.getString("password"));  
  28.   
  29.             try {  
  30.                 ScriptRunner runner = new ScriptRunner(conn,true,true);  
  31.                 runner.setErrorLogWriter(new PrintWriter(System.out));  
  32.                 runner.setLogWriter(new PrintWriter(System.out));  
  33.                 runner.runScript(Resources  
  34.                         .getResourceAsReader("ddl/hsql/schema.sql"));  
  35.                   
  36.             } finally {  
  37.                 conn.close();  
  38.             }  
  39.   
  40.         } catch (Exception e) {  
  41.             throw new RuntimeException("Description.  Cause: " + e, e);  
  42.         }  
  43.     }  
  44.   
  45.     public static DaoManager getDaoManager() {  
  46.         return daoManager;  
  47.     }  
  48.   
  49. }  

    相应的DaoConfig.java代码
java 代码
 
  1. /** 
  2.  * 
  3.  */  
  4. package com.yaoyuan.max.persistence.ibatis;  
  5.   
  6. import java.io.Reader;  
  7. import java.util.Properties;  
  8.   
  9. import com.ibatis.common.resources.Resources;  
  10. import com.ibatis.dao.client.DaoManager;  
  11. import com.ibatis.dao.client.DaoManagerBuilder;  
  12.   
  13. /** 
  14.  * @author Yao Yuan 
  15.  * 
  16.  */  
  17. public class DaoConfig {  
  18.   
  19.     private final DaoManager daoManager;  
  20.   
  21.     public DaoConfig(String propertyFilePath) {  
  22.         try {  
  23.             String resource = "com/yaoyuan/max/persistence/ibatis/dao.xml";  
  24.             Reader reader = Resources.getResourceAsReader(resource);  
  25.             Properties props = Resources.getResourceAsProperties(propertyFilePath);  
  26.             daoManager = DaoManagerBuilder.buildDaoManager(reader,props);  
  27.         } catch (Exception e) {  
  28.             e.printStackTrace();  
  29.             throw new RuntimeException(  
  30.                     "Could not initialize DaoConfig.  Cause: " + e);  
  31.         }  
  32.     }  
  33.   
  34.     /** 
  35.      * 
  36.      * @return 
  37.      */  
  38.     public DaoManager getDaomanager() {  
  39.         return daoManager;  
  40.     }  
  41. }  

4. 然后就可以取得Dao进行测试了
java 代码
 
  1. (CategoryDao)PersistenceFixture.getDaoManager().getDao(CategoryDao.class);  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值