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 の形式を指定する必要があるようです。つまり、 XMLDataSetxmlの固定 DTD に準拠しています。指定しない場合、Ant タスクはフォーマットを想定し、フラットなフォーマットは XML の例のようには見えません。flat

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

のネストされた要素として指定されたパラメータoperationを参照してください。

于 2011-07-12T16:37:35.527 に答える