`
littcai
  • 浏览: 249911 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论
阅读更多

        在单元测试中测试DAO,我们通常都需要初始化一些数据,这时使用DBUnit就比较方便,只需要在XML文件中写就可以了。但比较让我困惑的是DBUnit初始化数据是直接提交到数据库的,这样如果我们需要在执行完测试后将数据库恢复成原始状态就显的异常的困难。尤其在使用Spring的AbstractTransactionalDataSourceSpringContextTests做测试时,我们不需要显示的设置事务回滚,所有的测试代码执行完后就自动回滚了。找了很多资料也没发现DBUnit有这样的功能。请问谁有好的办法没有?另外如果使用DBUnit的时候完全可以只初始化一次数据,不必每次在setUp的时候执行一遍。请问这样的做法是否妥当?

我的代码:

java 代码
  1. /**  
  2.  * 由DBUnit初始化数据.  
  3.  *   
  4.  * @param dataName 数据配置文件名称  
  5.  *   
  6.  * @throws Exception  
  7.  */  
  8. protected void initData(String dataName) throws Exception   
  9. {          
  10.     IDatabaseConnection connection = null;   
  11.     IDataSet dataSet = null;   
  12.     this.jdbcTemplate.getDataSource().getConnection().setAutoCommit(false);   
  13.     connection =  new DatabaseConnection(this.jdbcTemplate.getDataSource().getConnection());          
  14.     logger.info("连接的数据库为:"+this.jdbcTemplate.getDataSource().getConnection().getCatalog());   
  15.     ClassPathResource cpr = new ClassPathResource(dataName+"-data.xml");             
  16.     dataSet = new XmlDataSet(cpr.getInputStream());                
  17.     InsertIdentityOperation.CLEAN_INSERT.execute(connection, dataSet);   
  18. }  
分享到:
评论
9 楼 zdonking 2007-05-18  
谢谢你的回答,我等会儿试下。
不知道commit有没有用,之前碰到的情况甚至是flush也没有用。
除非执行一条query 语句。
8 楼 littcai 2007-05-08  
zdonking 写道
你好,我和你一样也在使用相同的测试方式。
并且出现的问题也一样。
dao用的是hibernate,测试时经常出现update,save,delete不提交,但如果在这些操作后执行一个查询就可以了。也没有找到根本原因,希望能与楼主交流。
Hibernate没有flush的缘故,所以实际上操作并未提交到数据库,如果你使用spring的话可以使用一个拦截器,在每个方法执行后对Hibernate做一次commit操作.
7 楼 zdonking 2007-05-02  
你好,我和你一样也在使用相同的测试方式。
并且出现的问题也一样。
dao用的是hibernate,测试时经常出现update,save,delete不提交,但如果在这些操作后执行一个查询就可以了。也没有找到根本原因,希望能与楼主交流。
6 楼 Godlikeme 2007-04-09  
事务控制一定要注意,不要生写con.commit(),auto commit(),和spring事务管理有冲突。
5 楼 littcai 2007-04-09  
自己解决,顶一个。有谁使用MSSQL2000自增主键+DBUnit+AbstractTransactionalDataSourceSpringContextTests的可以找我深入研究一下
4 楼 littcai 2007-04-09  
在InsertIdentityOperation中发现了jdbcConnection.commit();和jdbcConnection.setAutoCommit(true);语句。造成Spring事务异常,所以只能使用DatabaseOperation,并手工设置IDENTITY_INSERT
3 楼 littcai 2007-04-09  
经检查可能是DBUnit使用了executeBatch造成的
2 楼 littcai 2007-04-09  
通过共用Spring的Datasource,解决了事务问题。但是又发现了另外一个问题,由于是使用的MSSQL2000的自增主键,在DBUNIT中就要使用InsertIdentityOperation了;然而由于使用的事务,InsertIdentityOperation.CLEAN_INSERT中的更新语句并未实时提交,造成了InsertIdentityOperation失效,郁闷啊~~~~~
看来DBUNIT只能做初始化数据库用,让数据库达到一个已知状态。
1 楼 Godlikeme 2007-04-09  
dbunit需要扩展事务处理,参考spring吧。
一次初始化数据可以采用,
建议为数据库建库脚本中的demodata,是所有测试都会使用的基础数据,且再测试过程中不会改变。

其他测试逻辑相关的数据都再setup时重新生成,保证测试用例tesecase的独立性,
如果采用事务可省略此步骤。

相关推荐

    dbunit-2.4.7所有jar以及dbunit入门教程

    DBUnit 是一个开源的 Java 库,专门用于数据库测试,它是 xUnit 测试框架(如 JUnit)的一个扩展。在数据库驱动的项目中,DBUnit 可以帮助开发者确保数据库状态的一致性,使得测试更加可靠。DBUnit 2.4.7 版本包含了...

    dbunit-2.4.9 源码

    DBUnit 是一个开源的 Java 库,专门用于数据库测试,它是 xUnit 测试框架的一部分,提供了数据驱动测试的解决方案。在版本 2.4.9 中,DBUnit 提供了一系列的功能,帮助开发者在进行单元测试时能够管理和操作数据库的...

    DBUNIT使用

    DBUNIT 使用 DbUnit 是一种用于数据库集成测试的重要工具,它提供了TestCase 子类,用户可以在自己的测试类中扩展它们,但也可以独立于 JUnit 以其他方式来使用 DbUnit。DbUnit 的主要用途是准备数据库和验证数据库...

    Dbunit数据库连接下载

    Dbunit 是一个强大的Java库,专门用于数据库的测试和数据管理。它被广泛应用于软件开发过程中,特别是对于那些依赖于数据库的应用程序,因为Dbunit能够帮助开发者有效地管理和控制数据库的状态,确保测试的一致性...

    DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类

    DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类...

    dbunit帮助文档(HTML版)

    DBUnit是一款开源的Java库,专门用于数据库测试,它遵循TestNG或JUnit测试框架。这个HTML版的帮助文档是从官方站点`http://www.dbunit.org/apidocs/index.html`获取的,包含了DBUnit的所有核心功能和用法的详细说明...

    dbunit2.2

    DBUnit 是一个开源的Java库,它扩展了JUnit框架,为数据库相关的单元测试提供了一种结构化的方法。在“dbunit2.2”这个压缩包中,包含了DBUnit 2.2版本的所有必要文件,使得开发者能够有效地进行数据库的单元测试。 ...

    spring与dbunit集成测试

    在软件开发中,Spring框架是Java企业级应用的主流选择,而DBUnit则是一个用于数据库测试的工具。本文将深入探讨如何将Spring与DBUnit整合,以实现高效、可靠的数据库集成测试。 首先,理解Spring的核心功能是至关...

    DBUnit 进行单元测试

    DBUnit 是一个强大的Java库,专门用于数据库的单元测试。它与JUnit和其他测试框架结合使用,可以帮助开发者在数据库层面上确保代码的正确性。DBUnit 提供了一种结构化的方式来导入和导出数据库数据,使得测试环境...

    dbunit使用必需Jar包

    DBUnit 是一个开源的 Java 工具,它与JUnit结合使用,用于数据库的测试驱动开发(TDD)。在Java应用程序的测试过程中,确保数据库状态的一致性是非常重要的,DBUnit 提供了这样的功能,它允许开发者导入和导出数据库...

    dbunit测试demo

    DBUnit 是一个 Java 编程语言的开源工具,专门用于数据库的单元测试。它与JUnit 结合使用,提供了一种结构化的方法来设置和验证数据库的状态,确保代码的正确性。在进行数据库驱动的应用程序开发时,DBUnit 可以帮助...

    dbunit开发文档

    DBUnit 是一个开源的 Java 库,专门用于数据库测试,它是 xUnit 测试框架(如 JUnit)的一个扩展。在数据库驱动的项目中,DBUnit 提供了一种结构化的方法来设置和验证数据库状态,从而确保测试的一致性和可靠性。这...

    DbUnit入门实战

    DbUnit 入门实战 DbUnit 是一个专门针对数据库测试的 JUnit 扩展,它可以将测试对象数据库置于一个测试轮回之间的状态。DbUnit 的设计理念是,在测试之前,备份数据库,然后给对象数据库植入我们需要的准备数据,...

    dbunit-2.2.jar

    dbunit的jar包,版本2.2

    通过DBUNIT做批量对比测试

    DBUNIT 是一个开源的 Java 库,专门用于数据库测试,它提供了一种结构化的方法来设置和验证数据库的状态。在软件开发中,测试是保证代码质量和功能正确性的重要环节,而 DBUNIT 尤其适用于对数据库操作进行测试,...

    DBUnit最佳实践之数据备份与恢复

    这篇“DBUnit最佳实践之数据备份与恢复”博文中,作者分享了如何有效地利用DBUnit进行数据备份和恢复,这对于开发和测试环境中的数据管理至关重要。 首先,我们需要了解DBUnit的基本概念。DBUnit是一个JUnit扩展,...

    DBUNIT使用手册

    DBUNIT是一个专门针对数据库驱动项目进行单元测试的开源框架,它扩展了JUNIT,使得对数据库的操作变得更加简单和可控。DBUNIT的核心在于它将数据库状态抽象为可预知的数据集,允许开发者使用XML等格式定义测试数据,...

    DBUnit最佳实践之使用ant命令

    DBUnit 是一个 Java 开发者常用的数据库测试工具,它与JUnit等测试框架配合,能够帮助开发者在测试过程中管理和填充数据库,确保数据的一致性和准确性。本文将深入探讨如何结合Ant构建自动化测试流程,利用DBUnit...

    单元测试JUnit4和DbUnit

    DbUnit则是一个专门用于数据库单元测试的工具,它允许开发者在测试前后对数据库的状态进行操作,如填充测试数据、清理数据等,以保证每次测试都在一致的环境中进行。 首先,了解JUnit4的基础知识至关重要。JUnit4...

Global site tag (gtag.js) - Google Analytics