`
shyboy0358
  • 浏览: 36721 次
文章分类
社区版块
存档分类
最新评论

一个DAO测试基类

 
阅读更多
  1. package com.taobao.dbunit.dao;   
  2.   
  3. import java.sql.SQLException;   
  4.   
  5. import javax.sql.DataSource;   
  6.   
  7. import org.dbunit.Assertion;   
  8. import org.dbunit.database.DatabaseConnection;   
  9. import org.dbunit.database.IDatabaseConnection;   
  10. import org.dbunit.dataset.DataSetException;   
  11. import org.dbunit.dataset.DefaultDataSet;   
  12. import org.dbunit.dataset.DefaultTable;   
  13. import org.dbunit.dataset.IDataSet;   
  14. import org.dbunit.dataset.xml.FlatXmlDataSet;   
  15. import org.dbunit.operation.DatabaseOperation;   
  16. import org.junit.Assert;   
  17. import org.junit.Before;   
  18. import org.springframework.beans.factory.annotation.Autowired;   
  19. import org.springframework.core.io.ClassPathResource;   
  20. import org.springframework.jdbc.datasource.DataSourceUtils;   
  21. import org.springframework.test.context.ContextConfiguration;   
  22. import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;   
  23. import org.springframework.test.context.transaction.TransactionConfiguration;   
  24.   
  25. @ContextConfiguration(locations = { "classpath:testApplicationContext.xml" })   
  26. @TransactionConfiguration(defaultRollback = true)   
  27. public class BaseDaoTest extends AbstractTransactionalJUnit4SpringContextTests {   
  28.   
  29.     @Autowired  
  30.     private DataSource dataSource;   
  31.   
  32.     private IDatabaseConnection conn;   
  33.   
  34.     @Before  
  35.     public void initDbunit() throws Exception {   
  36.         conn = new DatabaseConnection(DataSourceUtils.getConnection(dataSource));   
  37.     }   
  38.   
  39.     /**  
  40.      * 清空file中包含的表中的数据,并插入file中指定的数据  
  41.      *   
  42.      * @param file  
  43.      * @throws Exception  
  44.      */  
  45.     protected void setUpDataSet(String file) throws Exception {   
  46.         IDataSet dataset = new FlatXmlDataSet(new ClassPathResource(file)   
  47.                 .getFile());   
  48.         DatabaseOperation.CLEAN_INSERT.execute(conn, dataset);   
  49.     }   
  50.   
  51.     /**  
  52.      * 验证file中包含的表中的数据和数据库中的相应表的数据是否一致  
  53.      *   
  54.      * @param file  
  55.      * @throws Exception  
  56.      */  
  57.     protected void verifyDataSet(String file) throws Exception {   
  58.         IDataSet expected = new FlatXmlDataSet(new ClassPathResource(file)   
  59.                 .getFile());   
  60.         IDataSet dataset = conn.createDataSet();   
  61.   
  62.         for (String tableName : expected.getTableNames()) {   
  63.             Assertion.assertEquals(expected.getTable(tableName), dataset   
  64.                     .getTable(tableName));   
  65.         }   
  66.   
  67.     }   
  68.   
  69.     /**  
  70.      * 清空指定的表中的数据  
  71.      *   
  72.      * @param tableName  
  73.      * @throws Exception  
  74.      */  
  75.     protected void clearTable(String tableName) throws Exception {   
  76.         DefaultDataSet dataset = new DefaultDataSet();   
  77.         dataset.addTable(new DefaultTable(tableName));   
  78.         DatabaseOperation.DELETE_ALL.execute(conn, dataset);   
  79.     }   
  80.   
  81.     /**  
  82.      * 验证指定的表为空  
  83.      *   
  84.      * @param tableName  
  85.      * @throws DataSetException  
  86.      * @throws SQLException  
  87.      */  
  88.     protected void verifyEmpty(String tableName) throws DataSetException,   
  89.             SQLException {   
  90.         Assert.assertEquals(0, conn.createDataSet().getTable(tableName)   
  91.                 .getRowCount());   
  92.     }   
  93. }  
  1. @Test  
  2. public void updateUser() throws Exception {   
  •     setUpDataSet("com/taobao/dbunit/dao/user001.xml");   
  •        
  •     User user = new User();   
  •     user.setNick("user001");   
  •     user.setPassword("password002");   
  •     userDao.update(user);   
  •   
  •     verifyDataSet("com/taobao/dbunit/dao/user001_updated.xml");   
  • }  
分享到:
评论

相关推荐

    Storm流计算项目:1号店电商实时数据分析系统-12.基于HBase的Dao基类和实现类开发二.pptx

    基于HBase的Dao基类和实现类开发一12.基于HBase的Dao基类和实现类开发二13.项目1-地区销售额-需求分析和架构设计14.项目1-地区销售额-Spout融合Kafka Consumer及线程安全测试15.项目1-地区销售额-Bolt业务逻辑处理一...

    PHP_DAO_MYSQL php写的dao看起来还好

    在IT行业中,DAO(Data Access Object)模式是一种常见的设计模式,用于封装对数据库的...同时,这也是一个良好的机会,让你了解如何组织和设计可复用的代码,以及如何使用测试驱动开发(TDD)的方法来保证代码质量。

    hibenate 对DAO的封装

    在具体实现时,泛型DAO模板通常会有一个公共的基类,这个基类会包含对SessionFactory和Session的管理。SessionFactory是Hibernate的配置对象,而Session则是与数据库交互的主要接口。基类会提供如`getSession()`和`...

    不要重复 DAO !

    1. **抽象基类**:创建一个通用的DAO基类,包含一些通用的数据库操作,如执行SQL查询、事务管理等。子类可以继承这个基类并覆盖或添加特定的数据库操作。 2. **模板方法设计模式**:利用模板方法模式,将共有的操作...

    SSH中通用dao类

    在SSH项目中,可以创建一个基类`HibernateDAO`,包含如`save()`, `update()`, `delete()`, `getById()`等基本操作,然后其他特定业务的DAO继承自这个基类,以实现通用性和重用性。 3. **设计模式的应用**:通用DAO...

    JSP+DAO.rar_dao_dao java_java dao_jsp DAO_设计模式

    DAO模式的核心思想是创建一个专门负责与数据库交互的接口或抽象类,即DAO接口或基类,然后实现这个接口或继承这个基类来处理具体的数据库操作。这样,当需要修改数据库访问逻辑时,只需要改动DAO实现,而不会影响到...

    泛型dao

    而`Web_Test`可能是一个Web应用测试目录,里面包含了测试用例或测试配置,用于验证泛型DAO的正确性。 综上所述,泛型DAO是Java开发中一个强大的工具,结合了泛型、源码理解和工具使用,能有效提升数据访问层的代码...

    spring几种Dao支持配置

    `HibernateTemplate`封装了Hibernate的会话管理,提供了一套便捷的API,而`HibernateDaoSupport`则为DAO实现提供了一个基类,包含了SessionFactory的初始化和关闭。 - **MyBatis**:Spring整合MyBatis时,可以通过...

    自动生成DAO源代码

    这是一个通用的DAO基类,通常会包含一些通用的数据库操作方法,如增删改查。GenenicDao会利用Spring的JdbcTemplate或Hibernate的Session接口来执行SQL语句。Spring的JdbcTemplate提供了简单易用的API,用于执行SQL...

    DAO模式设计

    DAO模式的核心思想是通过创建一个独立于具体数据库操作的对象(即DAO),来封装对数据库的访问细节,这样可以使得业务代码不直接依赖于具体的数据库API,提高了代码的可测试性和可维护性。 在现代Java应用中,尤其...

    Don’t repeat the DAO!

    - **继承与抽象**:创建一个基类DAO,将共性功能如连接管理、事务处理等抽象出来,子类只负责特定数据表的业务逻辑。 - **模板方法设计模式**:在基类中定义模板方法,子类只提供特定的实现细节。 - **ORM框架**...

    DAO.zip_data access objects_objects

    此外,还可以考虑创建一个通用的DAO基类,提供共有的功能,如连接池管理。 综上所述,DAO模式是构建企业级应用的重要设计模式,它在数据访问层提供了灵活性、可扩展性和可测试性。"DAO.pdf"文档可能会深入探讨这些...

    用DbUnit进行SqlMap单元测试

    在本文中,我们看到一个使用 DbUnit 进行 SqlMap(iBATIS 的一部分,用于映射 SQL 查询到 Java 代码)DAO 单元测试的例子。SqlMap 是一个流行的 ORM(Object-Relational Mapping)框架,用于处理 SQL 数据库与 Java ...

    Spring支持DAO需要的jar包

    此外,Spring的JdbcDaoSupport类可以作为所有基于JDBC的DAO的基类,它提供了与JdbcTemplate的集成。 6. **AOP支持**:Spring的AOP模块可以创建拦截器来增强DAO方法,例如添加日志、性能监控等功能。`spring-aop.jar...

    Hibernate的通用dao

    DAO设计模式是软件工程中常见的一个模式,主要用于隔离业务逻辑层与数据存储层的交互。DAO接口定义了对特定数据源的所有操作,而其实现类则负责具体的数据访问细节。通用DAO则是这一模式的扩展,提供了一套适用于多...

    Spring+myBatis 整合两种方法,一种是dao 整合,一种是mapper接口代理

    在Spring中,我们可以创建一个继承自`org.mybatis.spring.SqlSessionDaoSupport`的DAO基类,然后为每个数据访问对象创建一个具体的实现类。在实现类中,我们可以使用`SqlSessionTemplate`或`SqlSession`来执行...

    Struts+Spring框架下的单元测试[总结].pdf

    3. **避免冗余**:尽量减少重复的测试代码,可以通过测试基类或测试辅助类来重用公共逻辑。 4. **可读性**:测试应该清晰易懂,命名要能反映测试的目的,注释要简洁明了。 5. **持续集成**:将单元测试集成到持续...

    TestNG框架使用

    结合给出的文件,我们可以看到一个完整的DAO层测试方案,从测试类的编写到连接池的配置,再到测试的执行和结果分析。这充分展示了TestNG在软件开发中的重要作用,即确保代码质量,降低维护成本。

    自定义Dao,反射实现

    在这个例子中,`BaseDao`是一个抽象基类,它使用了泛型T来表示任何类型的实体。构造函数接收实体类的Class对象,用于获取表名。`insert()`方法使用反射调用`execute()`方法执行SQL,这里省略了具体的JDBC操作细节,...

    spring hibernate 泛型DAO

    泛型DAO是一个通用的DAO实现,它使用Java的泛型特性,可以适用于任何继承自特定基类或者实现特定接口的数据实体类。这样,我们只需要编写一次DAO的通用实现,然后在需要的地方通过指定具体的类型即可。 下面是一个...

Global site tag (gtag.js) - Google Analytics