DbUnitの期待値ってレコードが空のテーブルはカラム情報も読み込まないのね
ということを今さらながら知りました。
なるほど,
Assertion.assertEquals(expectTable,
new CompositeTable(expectTable.getTableMetaData(), actualTable));
とやって,actualの評価を緩やかにしていたから気付かなかったのね。
#actualTableをCompositeTableにくるむと,expectTableにあるカラムだけ評価される。
#CompositeTableにくるまないと,expectとactualは完全一致しないとダメ。
こりゃ参ったな。と思ったけど「実は空テーブルです」的なマークを期待値に埋め込むようにして,独自assertionメソッド作りゃ解決だよねってことで,こんな風にした。
スペック
データ行の1行目のカラム(どこでもいい)に"***EMPTY***"ってあれば,そのテーブルは空って意味とする。
DbUnit - Assertion.assertEquals()の"Verify row count"の直前にこんなコード埋めておしまい。
if (expectedTable.getRowCount() > 0) { for (int i = 0; i < expectedColumns.length; i++) { Column expectedColumn = expectedColumns[i]; String columnName = expectedColumn.getColumnName(); Object expectedValue = expectedTable.getValue(0, columnName); if (expectedValue.toString().equlas("***EMPTY***")) { // 空テーブルなので,ここまで評価すれば十分 return; } }
相変わらず,雑なパッチだ。:-D