目次へ

5. データセット(2)

4章に引き続き、5章でもさまざまなデータセットについて説明します。

5.1 ReplacementDataset

従業員情報を表すemployeeテーブルがあったとします。e_numテーブルのプライマリキー「e_num」をserial型にします。e_numの値は挿入時にシーケンスが自動採番します。

カラム名 データ型 P NN 内容
e_num serial
*
*
従業員番号
name varchar(20)     従業員名

従業員を表すクラスは以下のよういなります。

EmployeeBean.java
public class Employee{
    private Integer e_num;
    private String name;

    
    //setterとgetterがある。
}

EmployeeBeanクラスには、employeeテーブルにデータを挿入するinsertメソッドを追加します。insertメソッドは、e_numカラムに挿入する値をメソッド実行時にその都度シーケンスから取得します。また、insertメソッド実行後には、シーケンスにより割り振られた番号がe_numフィールドに設定されるようにしましょう。

それでは、insertメソッドのテストはどのように作成すればよいでしょうか?テストメソッドでは、「メソッド実行後のテーブルデータ」を表すXMLファイルを作成する必要があります。しかしe_numの値はメソッド実行時に決まるため、テストプログラム作成時にテストデータとしてe_numを指定することができません。

<!-- e_numは5004になるかどうかわからない。そのため、このようなテストデータを用意してもエラーになる-->
<employee e_num="5004"  name="山田 花子"/>

このような場合に、ReplacementDataSetを使用すると便利です。ReplacementDataSetを利用すれば、データセットの特定の値を置換することができます。このケースでは、e_numカラムの値がinsertメソッドを実行するまでわかりません。そのため、変化するかもしれないe_numの値に仮に"[E_NUM]"という文字列を設定しておきます。

employee_after_insert.xml
<employee e_num="[E_NUM]"  name="山田 花子"/>

次にテストメソッド内で「メソッド実行後のテーブルデータ」を作成します。

EmployeeBeanTest.java
...
EmployeeBean employee=new EmployeeBean();
employee.setName("山田 花子");
employee.insert(); //insertメソッドを実行すると、o_numフィールドに設定される。

ReplacementDataSet expectedDataSet 
     = new ReplacementDataSet(new FlatXmlDataSet(new FileInputStream("employee_after_insert.xml")));
expectedDataSet.addReplacementObject("[E_NUM]",
     employee.getE_num());
...

insertメソッド実行後、まず、employee_after_insert.xmlを読み込み、ReplacementDataSetを生成しています。ReplacementDataSetには引数ひとつのコンストラクタが存在します。引数にはIDataSetを指定します。引数に指定したデータセットの特定のデータを置換して、新たなデータセットを作成します。
置換を実行するには、addReplacementObjectメソッドを使用します。一つ目の引数で指定した文字列を、2つ目の引数で指定したObjectで置換します。ここれは、データセット内の"[E_NUM]"という文字列を新しい従業員番号の値で置換しています。これで、いつでもexpectedDataSetは「メソッド実行後のテーブルデータ」と一致するはずです。

実習課題1

  • EmployeeBeanのinsertメソッドを実装しなさい。
  • DbUnitを使用し、inertメソッドのテストメソッドを作成し、実行しなさい。
  • テストメソッドは繰り返し実行できることを確認しなさい。

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp