日期:2014-05-16  浏览次数:20403 次

Spring中使用HSQLDB测试ibatis的dao

???????? 项目是用Spring+ibatis+jsp开发,一直再看敏捷开发方面的文章,虽然没有做到TDD,也没有做到事后测试,和每个方法都测试,但是也是在一直向这个方向努力,也在努力构建可测试的系统而努力。以前都是在测试一些工具类,现在努力在各个方面构建测试,努力做到自己的成果都是测试过的。 一直以来,数据库方面的测试都是比较困难的,特别是一些SQL语句是否正确,还有就是数据库中数据的不稳定性导致测试不可预见性。

??????? 从网上找了很多文章,都是HSQLDB测试Hibernate的 ,ibatis的找了很多都没有找到,只能自己一点点摸索,现在基本上稳定了,也可以了。写下来,经验共享一下,也让大家指点一下。废话少说,上代码。

????? 结构Controller + logic(业务代码)+DAO(基本上只用一个工具类DAO)

先看DAO代码,基本上也没有做什么,只是继承了Spring的SqlMapClientDaoSupport
java 代码
  1. /**? ?
  2. *数据访问类,所有对数据库访问的DAO都应继承这个抽象类, ?
  3. *可以利用其中一些公用方法? ?
  4. */??
  5. public?class?DefaultDAO?extends?SqlMapClientDaoSupport?{ ??

?

Logic基本上就是调用DAO进行一些操作,和一些业务代码,没有什么可介绍的。

下面介绍测试logic的测试基类

java 代码
java 代码
  1. import?java.io.Reader; ??
  2. ??
  3. import?junit.framework.TestCase; ??
  4. ??
  5. import?org.springframework.jdbc.datasource.DriverManagerDataSource; ??
  6. import?org.springframework.jdbc.datasource.SingleConnectionDataSource; ??
  7. import?org.springframework.orm.ibatis.SqlMapClientFactoryBean; ??
  8. ??
  9. import?propertity.config.SystemConfig; ??
  10. ??
  11. import?com.ibatis.common.resources.Resources; ??
  12. import?com.ibatis.sqlmap.client.SqlMapClient; ??
  13. import?com.ibatis.sqlmap.client.SqlMapClientBuilder; ??
  14. ??
  15. public?abstract?class?DefaultLogicTest?extends?TestCase?{ ??
  16. ??
  17. ????private?SingleConnectionDataSource?m_dataSource; ??
  18. ????private?SqlMapClient?m_sqlMapClient;?//?Actually?initialized?in?superclass ??
  19. ????private?DefaultDAO?m_dao; ??
  20. ????protected?void?setUp()?throws?Exception?{ ??
  21. ????????super.setUp(); ??
  22. ????????