использование dbunit для очистки вставки в базу данных от цели муравья - PullRequest
1 голос
/ 12 июля 2011

Я использую dbunit для тестирования операций с БД в своем веб-приложении. Недавно я использовал задачу 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>
...

Я хотел очистить вставку в db, значения из этого xml-файла. В тестовом примере вы делаете это с помощью

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"
    />

, где имя драйвера, имя пользователя, пароль и т. Д. Взяты из файла свойств

Однако я получаю эту ошибку

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"))

успешно вставляет данные.

Приветствуется любая помощь

спасибо

mark

1 Ответ

1 голос
/ 12 июля 2011

Я не уверен, для чего предназначен метод DbUnitUtils.createDataSet (), но похоже, что вам может потребоваться указать формат для XML как xml, то есть соответствующий фиксированному DTD дляXMLDataSet .Задача Ant принимает формат flat, если вы его не указали, а плоский формат не похож на ваш пример XML.

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

См. Параметры, указанные как вложенные элементы для operation.

...