DBUNIT:使用DBunit使用DB2数据库中的值验证XML数据

时间:2012-06-02 09:28:07

标签: xml database db2 dbunit

我有一个包含1000条记录的巨大XML。我们的Job将这些项加载到db2数据库中。之后,我们手动检查是否所有记录都已写入数据库,并且所有列都填充为XML值。

我听说DBUnit可以简单地自动化我的问题。我试图从网上复制代码并自定义。但没有什么工作正常。

所以有人请提供一个小例子来验证数据库的XML值。

先谢谢 WebTester

1 个答案:

答案 0 :(得分:0)

这个工作的groovy示例旨在演示如何使用dbunit ANT任务。

要发现dbunit的真正威力,您需要阅读doco并试用示例:

http://www.dbunit.org/

实施例

按如下方式运行,并在数据库中发现不匹配的数据行

$ groovy dbunit
   [delete] Deleting directory /home/mark/Files/Dev/groovy/sql/build
   [dbunit] Executing compare: 
   [dbunit]           from file: /home/mark/Files/Dev/groovy/sql/dbunit.xml
   [dbunit]           with format: flat
Caught: : junit.framework.ComparisonFailure: value (table=TEST1, row=2, col=Y) expected:<300[1]> but was:<300[0]>

dbunit.xml

此文件包含预期的数据库数据:

<?xml version='1.0' encoding='UTF-8'?>
<dataset>
  <TEST1 ID="1" X="10" Y="1000"/>
  <TEST1 ID="2" X="11" Y="2000"/>
  <TEST1 ID="3" X="12" Y="3001"/>
  <TEST1 ID="4" X="13" Y="4000"/>
  <TEST1 ID="5" X="14" Y="5000"/>
  <TEST1 ID="6" X="15" Y="6000"/>
</dataset>

dbunit.groovy

groovy脚本创建H2数据库并用数据填充它。之后它运行dbunit以确保加载了正确的数据:

//
// Dependencies
// ============
//
import groovy.sql.Sql

@Grapes([
    @Grab(group='com.h2database', module='h2', version='1.3.167'),
    @Grab(group='org.dbunit', module='dbunit', version='2.4.8'),
    @Grab(group='org.slf4j', module='slf4j-simple', version='1.6.4'),
    @GrabConfig(systemClassLoader=true),
])

//
// Main program
// ============
//
// Connection properties
def driver = "org.h2.Driver"
def url    = "jdbc:h2:build/db/test"
def user   = "user"
def pass   = "pass"

// Cleanup
def ant = new AntBuilder()
ant.delete(dir:"build")

// Add the dbunit task into the ANT builder
ant.taskdef(name:"dbunit", classname:"org.dbunit.ant.DbUnitTask")

// Populate the test database
def sql = Sql.newInstance(url, user, pass, driver)
sql.execute("CREATE TABLE test1 (id identity, x varchar(10), y varchar(10))")
sql.execute("INSERT INTO test1 (x,y) VALUES (10,1000)")
sql.execute("INSERT INTO test1 (x,y) VALUES (11,2000)")
sql.execute("INSERT INTO test1 (x,y) VALUES (12,3000)")
sql.execute("INSERT INTO test1 (x,y) VALUES (13,4000)")
sql.execute("INSERT INTO test1 (x,y) VALUES (14,5000)")
sql.execute("INSERT INTO test1 (x,y) VALUES (15,6000)")
sql.close()

// Compare the data
ant.dbunit(driver:driver, url:url, userid:user, password:pass) {
    compare(src:"dbunit.xml", format:"flat")
    dbconfig {
        property(name:"datatypeFactory", value:"org.dbunit.ext.h2.H2DataTypeFactory")
    }
}