BeanのListをDbUnitのDataSetに変換

  1. DeptDao deptDao = new DeptDao();
  2. List<Dept> actual = deptDao.listAllDept();
  3. BeanListConverter converter = new BeanListConverter(actual);
  4. IDataSet dataSet = converter.convert();

この場合、Deptクラスのリストをデータセットに変換してる。 ちなみにDeptクラスはただのBean。

  1. public class Dept implements Serializable {
  2. private int deptno;
  3. private String dname;
  4. private String location;
  5. // has getters and setters...
  6. }

こうやってBeanのListをDataSetに変換してしまえば、 DbUnitのAssertion#assertEquals(IDataSet, IDataSet)でアサートできます!

  1. List<Dept> actual = deptDao.listAllDept();
  2. BeanListConverter converter = new BeanListConverter(actual);
  3. IDataSet dataSet = converter.convert();
  4. IDataSet initialDataSet = new FlatXmlDataSet(new File("dept.xml"));
  5. Assertion.assertEquals(initialDataSet, dataSet);

ネストしたBeanをDateSetに変換

ネストしたBeanをDbUnitのデータセットに変換できるように対応しました。 ネストしたBeanとは次のようなことを意味してます。

あるBeanのプロパティとして、

  • 別のBeanを持つ
  • 別のBeanをListで持つ
  • 別のBeanを配列で持つ

テストコードも記述して、コミットしています。

ネストしたBeanをどんなDataSetにしているかというと、Beanの型ごとにDbUnitのテーブルとしています。 つまりこういうクラス

  1. public class SampleListBean implements Serializable {
  2. private String name;
  3. private List<SampleNestedBean> list;
  4. // setter and getters...
  5. }
があると、データセットはこうなります。

  • SampleListのテーブル
  • SampleNestedBeanのテーブル

SampleListBeanのリストをデータセットに変換すると、各要素が持つNestedBeanはすべて同じテーブルになります。

たとえば、SampleListBeanのリストがこうだとします。

  1. List
  2. * SampleListBean1
  3. * NestedBean1
  4. * NestedBean2
  5. * NestedBean3
  6. * SampleListBean2
  7. * NestedBean4
  8. * NestedBean5
これをデータセットに変換すると、次のXMLで記述したデータセットと等価になります。
  1. <dataset>
  2. <samplelistbean name="SampleListBean1" />
  3. <samplelistbean name="SampleListBean2" />
  4. <samplenestedbean name="NestedBean1" />
  5. <samplenestedbean name="NestedBean2" />
  6. <samplenestedbean name="NestedBean3" />
  7. <samplenestedbean name="NestedBean4" />
  8. <samplenestedbean name="NestedBean5" />
  9. </dataset>
SampleListBeanとNestedBeanは別のテーブルになりますし、その結果アサーションも別に行うことができます。

DbUnitNGで提供するAssertionHelperクラスを利用するとBeanのリストとXMLやExcelをラクにアサートできます。