注: 本篇的测试使用的数据库为Oracle, 其它数据库的情况可能会有所不同。
ReplacementDataSet继承AbstractDataSet, 而AbstractDataSet实现了IDataSet接口。
因此Dbunit中任何以IDataSet为参数对象类型的方法都可以使用ReplacementDataSet.
下面是这篇教程的应用场景:
Channel类:
@Entity
@Table(name="t_channel")
@SequenceGenerator(name="TestSEQ",sequenceName="test_seq",allocationSize=1,initialValue=100)
public class Channel {
/**
* 栏目的主键
*/
private int id;
/**
* 栏目的名称
*/
private String name;
/**
* 父类栏目
*/
private Channel parent;
@ManyToOne
@JoinColumn(name="pid")
public Channel getParent() {
return parent;
}
public void setParent(Channel parent) {
this.parent = parent;
}
...
}
这里的Channel是一个树形结构,每一个Channel有它的父级和子级。
在数据库中, 用一个pid外键关联到自身的id。
<t_channel id="0" name="网站系统栏目" pid="null"/>
<t_channel id="1" name="用户管理模块" pid="0"/>
<t_channel id="2" name="用户管理1" pid="1"/>
<t_channel id="3" name="用户管理2" pid="1"/>
<t_channel id="4" name="用户管理3" pid="1"/>
<t_channel id="5" name="用户管理4" pid="1"/>
测试数据结构如上所示:
------------------------------------
网站系统栏目
-用户管理模块
-用户管理1
-用户管理2
-用户管理3
-用户管理4
-------------------------------------
网站的根栏目是 网站系统栏目, id=0, pid=null
然后是 用户管理模块 id=1, pid=0,
接下来是用户管理1,2,3,4 id为别为2,3,4,5 , pid都是1, 也就是用户管理模块的子模块。
测试:
1.
IDataSet ds=createDataSet("topic"); //createDataSet(String filename)通过文件输入流,返回一个测试数据对象。详情见入门教程
DatabaseOperation.CLEAN_INSERT.execute(dbunitCon,ds);
上面的代码会情况数据库,并插入xml文件中的测试数据。
但是运行之后会意外的发现错误信息:
org.dbunit.dataset.datatype.TypeCastException: Error casting value for table 't_channel' and column 'PID'
at org.dbunit.operation.AbstractBatchOperation.execute(AbstractBatchOperation.java:193)
at com.lj.core.dao.TestChannelDao.setUp(TestChannelDao.java:63)
Caused by: org.dbunit.dataset.datatype.TypeCastException: Unable to typecast value <null> of type <java.lang.String> to DECIMAL
Caused by: java.lang.NumberFormatException
at java.math.BigDecimal.<init>(BigDecimal.java:368)
at java.math.BigDecimal.<init>(BigDecimal.java:647)
at org.dbunit.dataset.datatype.NumberDataType.typeCast(NumberDataType.java:79)
... 37 more
也就是说,pid=null这里是不能被插入数据库的。
这时我们会首先把它去掉,看看能不能解决问题。
2. 于是我们改成<t_channel id="0" name="网站系统栏目" />
再次运行测试。
结果发现数据被导入数据库, 只不过pid那一列全部没有任何数值。
看来测试数据的pid是不能去掉的。
3. 要解决这个问题, 就必须使用ReplacementDataSet,将xml测试文件中的字符串的
"null"转换成实际的
null。
代码如下:
IDataSet ds=createDataSet("topic");
ReplacementDataSet rds=new ReplacementDataSet(ds);
rds.addReplacementObject("null", null); //将“null”转换成null.
DatabaseOperation.CLEAN_INSERT.execute(dbunitCon,rds);
此时将网站系统栏目加入 pid="null",
再次运行测试代码,就可以看到数据被正常加入了进去。
网站系统栏目那里的pid是没有值的,就达到我们的需求了。
- 大小: 43.3 KB
- 大小: 54.1 KB
- 大小: 61.6 KB
分享到:
相关推荐
DBUNIT 使用 DbUnit 是一种用于数据库集成测试的重要工具,它提供了TestCase 子类,用户可以在自己的测试类中扩展它们,但也可以独立于 JUnit 以其他方式来使用 DbUnit。DbUnit 的主要用途是准备数据库和验证数据库...
DbUnit 是一个针对数据库驱动项目的JUnit...在实际项目中,结合使用DbUnit和其他单元测试框架(如JUnit或TestNG),可以形成强大的测试解决方案,确保整个应用程序的质量,特别是在金融等对数据精确度要求极高的领域。
DBUnit 是一个开源的 Java 工具,它与JUnit结合使用,用于数据库的测试驱动开发(TDD)。在Java应用程序的测试过程中,确保数据库状态的一致性是非常重要的,DBUnit 提供了这样的功能,它允许开发者导入和导出数据库...
标签中的 "源码" 和 "工具" 指示了这个话题不仅涉及实际操作,还可能包括编写自定义代码来集成 DBUnit 到项目中,以及使用 DBUnit 这个工具进行数据库管理。 综上所述,DBUnit 是一个强大的数据库测试工具,通过 ...
4. **数据库连接(Database Connection)**: 在使用 DBUnit 之前,需要配置一个数据库连接。这可以通过 JDBC URL、用户名和密码实现。 ### 使用 DBUnit 的步骤 1. **初始化**: 首先,你需要创建一个 `...
在使用 DBUnit 进行测试时,首先需要引入 dbunit-2.4.7.jar 和其他必要的依赖库,如 JDBC 驱动。接下来,创建一个 `IDatabaseConnection` 实例,该实例代表与数据库的连接。然后,可以使用 `DatabaseConfig` 来配置 ...
DBUnit 是一个开源的 Java 库,专门用于数据库测试,它是 xUnit 测试框架的一部分,提供...通过分析其源码和参考 API 文档,开发者不仅可以掌握如何使用 DBUnit,还能学习到数据库操作、测试策略和设计模式等相关知识。
DBUnit 是一个 Java 开发工具,专门用于数据库的测试,它与单元测试框架如 JUnit 配合使用,确保在测试前后数据库的状态正确无误。DBUnit 的核心思想是在执行测试之前清空并填充测试数据,然后在测试完成后恢复原始...
以下是一个简单的Ant构建文件(build.xml)片段,展示了如何使用DBUnit进行数据初始化: ```xml <project name="DBUnit-Ant-Example" default="run-dbunit"> <taskdef name="dbunit" classname="org.dbunit.ant....
doc 文件夹可能包含了Dbunit的API文档或者其他技术文档,这些文档对于理解和使用Dbunit非常有帮助,它们详细解释了各个类和方法的功能,以及如何在项目中正确使用。 总的来说,Dbunit是一个强大的数据库测试框架,...
DBUnit通过使用XML或Flat CSV格式的数据集来管理这些操作,使得数据库状态的管理变得标准化且可重复。 ### 主要功能 1. **数据导入/导出**:DBUnit可以将数据从数据库导出到XML或CSV文件,也可以将这些文件中的...
使用DBUnit,我们可以创建一个数据集(通常为XML或CSV格式),该数据集包含用于初始化数据库的记录。在测试开始前,这些数据会被加载到数据库中,形成一个已知的起点。测试执行完毕后,还可以选择将数据库恢复到初始...
以下是使用 DBUNIT 进行批量对比测试的主要步骤: 1. **准备数据集**:首先,你需要创建数据集文件,这些文件描述了测试前后期望的数据库状态。数据集通常包含列名和对应的值,可以使用 CSV(逗号分隔值)或 XML ...
在使用 DbUnit 进行数据库测试时,首先需要准备测试环境。在这个例子中,我们创建了一个名为 "student" 的测试数据库,该数据库是在 MySql 中建立的。接着,在一个名为 "DBUnitSample" 的 Java 工程中,导入了 ...
通过阅读这个文档,开发者可以更快地理解和掌握DBUnit的使用。 总的来说,DBUnit作为一个强大的数据库测试工具,极大地简化了数据库驱动的单元测试工作。无论是对于开发人员还是测试人员,理解并熟练运用DBUnit都是...
DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类...
1. JUnit 集成:DBUnit 可以很容易地与 JUnit 结合使用,通过 `@Before` 和 `@After` 注解来设置和清理数据库。 2. Spring 集成:如果你的项目使用 Spring,可以利用 Spring's `DbUnitTestExecutionListener` 来...
标题“dbunit测试demo”表明这是一个关于如何使用 DBUnit 进行测试的实例。描述中提到的链接指向了一篇博客文章,这可能包含了一个具体的 DBUnit 测试用例的详细步骤和解释。尽管我们无法直接访问该链接,但我们可以...
DbUnit的使用通常与JUnit结合,首先需要在测试类中导入DbUnit的相关库,并配置数据库连接信息。在测试前,使用DbUnit的DatabaseConfig和DataSet来加载XML或CSV格式的测试数据到数据库。典型的流程包括:连接数据库、...