1

我使用 dbunit 在我的 webapp 中测试 db 操作。最近,我使用 dbunits ant 任务 org.dbunit.ant.DbUnitTask 在我的数据库中创建项目的 xml 表示。我得到了这个

<?xml version='1.0' encoding='UTF-8'?>
<dataset>
  <table name="AUTHOR">
    <column>AUTHOR_ID</column>
    <column>AUTHOR_NAME</column>
    <column>AUTHOR_ADDRESS</column>
    <row>
      <value>0</value>
      <value>j.k.rowling</value>
      <value>london</value>
    </row>
    <row>
      <value>1</value>
      <value><![CDATA[stephen king]]></value>
      <value><![CDATA[castle rock,maine]]></value>
    </row>
  </table>
...

我想从这个 xml 文件中清除插入到 db 中的值。在测试用例中,您可以通过

public void init() throws FileNotFoundException, IOException, ClassNotFoundException, SQLException, DatabaseUnitException {
        connection = DbUnitUtils.createConnection();
        try {
            DatabaseOperation.CLEAN_INSERT.execute(connection,DbUnitUtils.createDataSet("initialdata.xml"));
        }finally {
            connection.close();
        }
    }

我想用一个蚂蚁目标做同样的事情。所以我写了

<target name="insertdata" depends="startdb">
        <dbunit driver="${db.driver}"
            url="${db.url}"
            userid="${db.username}"
            password="${db.password}">
            <operation type="CLEAN_INSERT" src="data/dbunit/initialdata.xml"/>
        </dbunit>

    </target>

<taskdef 
    name="dbunit" 
    classname="org.dbunit.ant.DbUnitTask"
    classpathref="clientclasspath"
    />

其中 driver.username,password 等取自属性文件

但是,我收到此错误

insertdata:
   [dbunit] Executing operation: CLEAN_INSERT
   [dbunit]           on   file: C:\code\jee\myapp\data\dbunit\initialdata.xml
   [dbunit]           with format: null
   [dbunit] 550 [main] ERROR org.dbunit.database.DatabaseDataSet - Table 'value' not found in tableMap=org.dbunit.dataset.OrderedTableNameMa
p[_tableNames=[AUTHOR], _tableMap={AUTHOR=null}, _caseSensitiveTableNames=false]

任何人都可以理解这个错误吗?传递给方法时相同的 xml 文件DatabaseOperation.CLEAN_INSERT.execute(connection,DbUnitUtils.createDataSet("initialdata.xml"))

成功干净地插入数据。

欢迎任何帮助

谢谢

标记

4

1 回答 1

1

我不确定 DbUnitUtils.createDataSet() 方法的用途,但看起来您可能需要将 XML 的格式指定为xml- 即符合XMLDataSet 的固定 DTDflat如果您未指定格式,Ant 任务将采用格式,并且平面格式与您的示例 XML 不同。

<operation type="CLEAN_INSERT" src="data/dbunit/initialdata.xml" format="xml" />

请参阅指定为嵌套元素operation参数。

于 2011-07-12T16:37:35.527 回答