DBUnit 4章 データセット(1)
- 4.1. IDataSet
- 4.2. FlatXmlDataSet
- 4.3. FlatXmlDataSetとDTD
- 4.4. DTDの生成
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を作成せよ。