DBUnit 5章 データセット(2)
- 5.1. ReplacementDataset
- 5.2. CompsiteDataSet
- 5.3. QueryDataSet、DatabaseConnection
- 5.4. XlsDataset
5.2 CompsiteDataSet
もうひとつ便利なデータセットを紹介します。「3. 更新メソッドのテスト」では、AcceptOrderBeanクラスのinsertメソッドのテストを作成しました。そのときに、「メソッド実行前のテーブルデータ」「メソッド実行後のテーブルデータ」の2つを表すテストデータをXMLで作成しました。
accept_order_data.xml
<?xml version='1.0' encoding="EUC-JP"?> <dataset> <ACCEPT_ORDER o_num="5001" c_num="1000" p_num="501" dc_rate="5" option_price="30" employee="101" accept_date="2004-01-01" /> <ACCEPT_ORDER o_num="5002" c_num="1001" p_num="502" dc_rate="10" option_price="20" employee="104" accept_date="2004-02-02" /> <ACCEPT_ORDER o_num="5003" c_num="1002" p_num="503" dc_rate="15" option_price="10" employee="101" accept_date="2004-01-31" /> </dataset>
accept_order_data2.xml
<?xml version='1.0' encoding="EUC-JP"?> <dataset> <ACCEPT_ORDER o_num="5001" c_num="1000" p_num="501" dc_rate="5" option_price="30" employee="101" accept_date="2004-01-01" /> <ACCEPT_ORDER o_num="5002" c_num="1001" p_num="502" dc_rate="10" option_price="20" employee="104" accept_date="2004-02-02" /> <ACCEPT_ORDER o_num="5003" c_num="1002" p_num="503" dc_rate="15" option_price="10" employee="101" accept_date="2004-01-31" /> <ACCEPT_ORDER o_num="5004" c_num="1004" p_num="501" dc_rate="20" option_price="400" employee="101" accept_date="2004-01-03" /> </dataset>
ただ、insertメソッドはデータを1行だけ追加するメソッドです。ですから、accept_order_data.xmlではaccept_order_data2.xmlでは、o_numが5001から5003までのデータが重複しています。これでは、XMLファイルのメンテナンスが大変です。
このような場合、CompositeDataSetが便利です。CompositeDataSetを利用すれば、複数のデータセットをまとめてひとつのデータセットとして取り扱うことができます。使い方は、簡単です。まず、データファイルを用意するのですが、「メソッド実行後のテーブルデータ」全てを記述するのではなく「insertメソッド実行後に増えるデータ」のみを記述します。
accept_order_insert_data.xml
<?xml version='1.0' encoding="EUC-JP"?> <dataset> <!-- insertメソッドを実行すると、以下の1行が増えるはず--> <ACCEPT_ORDER o_num="5004" c_num="1004" p_num="501" dc_rate="20" option_price="400" employee="101" accept_date="2004-01-03" /> </data>
すると、「メソッド実行後のテーブルデータ」は"accept_order_data.xml"のデータと"accept_order_insert_data.xml"のデータをあわせたものになります。
IDataSet beforeDataSet=new FlatXmlDataSet(new FileInputStream("accept_order_data.xml")); IDataSet insertDataSet=new FlatXmlDataSet(new FileInputStream("accept_order_insert_data.xml")); CompositeDataSet expectedDataSet = new CompositeDataSet(beforeDataSet,insertedDataSet);
CompositeDataSetのコンストラクタの引数で、どのデータセットとどのデータセットをまとめてひとつにするか、指定します。ここでは、beforeDataSetとinsertDataSetをまとめてひとつのデータセットとしています。
実習課題2
3章の実習課題1をCompositeDataSetを使用するように修正しなさい。