目次へ

4.4 DTDの生成

FlatXmlDataSetを使用してデータベーステストを行う場合、XMLにはDTDを必ず指定するべきでしょう。これにより、「テストクラス自身のバグ」を減らすことができます。ただ、DTDを作成するのは結構面倒です。そこで、DbUnitでは、データベースよりDTDを自動作成する仕組みも提供しています。以下がサンプルです。

DtdSample.java
public class DtdSample {


    public static void main(String[] args) throws Exception {


        // データベースに接続する。
        Class.forName("org.postgresql.Driver");
        Connection jdbcConnection = DriverManager.getConnection("jdbc:postgresql:Training.dbunit",
                                                                "postgres",
                                                                 "");
        IDatabaseConnection connection = new DatabaseConnection(jdbcConnection);
     
        // Dtdファイルを作成する
        FlatDtdDataSet.write(connection.createDataSet(),
                             new FileOutputStream("test.dtd"));
     }

}

まず、データベースへの接続をあらわす、DbUnitのIDatabaseConnectionを取得します。次に、org.dbunit.dataset.xml.FlatDtdDataSetのwriteメソッドを使用しDTDを出力します。ここでは、test.dtdというファイルにDTDを取得しています。

例えば、Training.dbunitデータベースはAcceptingOrderテーブル1つだけ持つデータベースだった場合、test.dtdには以下のように出力されます。

test.dtd
<!ELEMENT dataset (
       accept_order*)
>

<!ELEMENT accept_order EMPTY>
<!ATTLIST accept_order
       o_num CDATA #REQUIRED
       c_num CDATA #IMPLIED
       p_num CDATA #IMPLIED
       dc_rate CDATA #IMPLIED
       option_price CDATA #IMPLIED
       employee CDATA #IMPLIED
       accept_date CDATA #IMPLIED
>

実習課題3

FlatDtdDataSetを使用し、Customerテーブルの構造を表すDTDを作成せよ。

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp