S2UnitのExcelによる期待値表

DataSet expected = readXls("期待値.xls");
assertEquals(expected, reload(expect)); // (1)現在のDBの状態と期待値を比較
assertEquals(expected, RESULT_BEAN); // (2)取得したBeanのプロパティを期待値と比較
assertEquals(expected, RESULT_BEAN_LIST); // (3)取得したList中のBeanのプロパティを期待値と比較

と、Excelで期待値を書いておいて色々比較できる素敵なS2Unitですが、(1),(3)のように複数レコード/Beanの期待値チェックをするときに、レコード/Bean数を厳密にチェックしていない気がします。
Excelに存在している行を元にチェックをしているだけで、それ以上のレコード/Beanが第2引数側に存在していてもチェックしないということです。

たとえば、レコードから3行削除するメソッドを実行した後に(1)の方法でチェックします。
期待値としてはテーブルの初期状態から3行削除したExcelシートを入力します。
で、assertEqualsでチェックするわけです。

で、この結果なんですが、実際に削除されていてもされていなくてもどっちでも結果OK=グリーンバーになるんです。

Excelシートに存在する行しかチェックしないので、Excelから削除した3行が実際にDB上でどうなっているかは確認されないと。

暗黙的に行/レコード数チェックが行われた方がうれしいと思うんですが、これはあえてこういう仕様になっているんでしょうか。


[追記]
エーと、訂正。(3)のListとの比較だと、行数/Listサイズチェックが行われますね。片方に過不足があればきちんと検出されます。

上記の問題は(1)のときだけ発生します。

原因はreload(DataSet)の使い方にあるようです。
reload(DataSet)の仕様が、引数に渡したDataSetの行だけを対象に最新状態を取得しなおすということなので、Excelに書いていない行はチェックされないわけですね。

うーん。INSERT/UPDATEの場合は問題ないんですが、DELETEの場合のチェックをどうしたらいいんでしょうかね。

と一瞬悩んでひらめいた。削除したレコードも記載してある初期化用Excelを元にreloadして、それとは別の期待値Excelと比較すればいいわけか。

DataSet before = readXls("初期値.xls");
DataSet expected = readXls("期待値.xls");
assertEquals(expected, reload(before)); // (1)現在のDBの状態と期待値を比較
期待値と比較

これでどうかな。


[追記2]
うーん。だめでした。何がだめかというと。初期値.xlsを元にreloadした結果のDataSetは削除行のカラム値がnullになるだけで行自体が削除されるわけではなかったのです。

最初に5行あって、3行削除して実際には2行になるのですが、reload()したDataSet中では相変わらず5行あることになっていて、で削除行の値がすべてnullになっていると。

なので、残る2行だけを書いた期待値.xlsと比較すると行数不一致でNGになってしまうわけです。

どうしたもんでしょ。