テストケースの追加と、バグを修正しました!
DbUnitNG プロジェクト日本語トップページ - SourceForge.JP
AssertionHelperクラスを使えばラクにアサートすることができます。
List<Dept> deptList = deptDao.listAllDept();
AssertionHelper.assertEqualsOnlyColumnsInFile(
deptList,
getClass(),
"dept.xml");
単に内部ではリストをデータセットに変換して、ファイルと比較してるだけなんですけどね。
getClass()してるのは、ファイルをテストクラスと同じパッケージから探すためです。
テストクラスが「aaa.bbb.ccc.HogeTest」であれば、「aaa/bbb/ccc/dept.xml」を読み込みます。
メソッド名のとおり、ファイルに記述したカラムのみ比較します。
たとえば、BeanであるDeptクラスにこういうプロパティがあるとします。
- dname
- deptno
- location
- updateDate
updateDateは更新日付と考えましょう。
一方、XMLはこういう記述です。
<?xml version='1.0' encoding='UTF-8'?> <dataset> <DEPT DEPTNO="10" DNAME="ACCOUNTING" LOCATION="NEW YORK" /> <DEPT DEPTNO="20" DNAME="RESEARCH" LOCATION="DALLAS" /> <DEPT DEPTNO="30" DNAME="SALES" LOCATION="CHICAGO" /> <DEPT DEPTNO="40" DNAME="OPERATIONS" LOCATION="BOSTON" /> </dataset>
updateDateはありません。
なので、アサートではdname,deptno,locationのみ比較します。
DbUnitのデフォルトでは、こういうカラムが異なる場合、アサートが失敗してしまいます。
自分でDefaultColumnFilter.includedColumnsTable()とかexcludedColumnsTable()とかしないといけない。
なのでAssertionHelperに組み込んでおきました。
もちろん通常のDbUnitのアサートをしたいときは、普通にDbUnitのAssertionクラスを利用すればいいわけです。