DBUnit Testing Tips2

DBUnit使ってテストを書いています。
エクセルでテストデータを用意しているのですが、
結構トラブルに見舞われたりします。
今の作業の手順はこんな感じです。

1.OracleにAcesssで接続して、テストデータを設定。
 データ入力はM$のAccessが楽です。
データベースは他の開発者と並列でテストできるように、
自分専用のスキーマを用意しています。

2.DbUnitのエクスポート機能で、テストデータをエクセルにエクスポート。

3.テストデータを加工
 エクスポートで出力したデータを加工すれば、
エクセルで1から手入力でデータ作るより、
クリーンインサート時にトラブルが起きにくいようです。
エクセルでセルの書式設定などはやらないほうが無難。

4.テストコードを書く。

5.実装コードを書く。

また、マスターデータは親クラスでテストデータとは別にクリーンインサートしています。トランザクション的なデータは、テストごとに必要に応じて用意するという作戦です。

DBUnit Testing Tips3 ITable型のデータをカラム名で並び替える方法

今日はこれではまりました。
取得したデータや期待値の並び順が不定だとテストコードは書けません。
DatabaseConnection.createDataSetメソッドなどでは並び順が不定の状態で、データが返ります。
ITableをSortedTableクラスでラップすれば、並び替えたデータを取得できます。

IDataSet dataSet = getConnection().createDataSet(new String {"TABLE_A"});
// 並び替え前のテーブルデータ
ITable table = dataSet.getTable("TABLE_A");
// 並び順を指定。COLUMN_AとCOLUMN_Bの値を使ってデータを並び替える
ITable sortedTable = new SortedTable(table, new String{"COLUMN_A", "COLUMN_B"});

//カラムCの値をチェック、並び順が予想できてるぜ
assertEquals("1番目", sortedTable.getValue(0, "COLUMN_C"));
assertEquals("2番目", sortedTable.getValue(1, "COLUMN_C"));
assertEquals("3番目", sortedTable.getValue(2, "COLUMN_C"));