`
yaoyuan
  • 浏览: 25992 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

应用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);  
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics