0

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

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

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

在此先感谢 WebTester

4

1 回答 1

0

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

要发现 dbunit 的真正威力,您需要阅读文档并尝试示例:

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")
    }
}
于 2012-06-02T16:46:47.793 回答