<他の記事の案内です>
<案内おわり>
- DBのテーブルのカラムの値が空文字列
- 期待値テーブル(xls)の対応するセルが空のセル
の場合、空のセルが null として扱われてしまい、assert が失敗する。
@Test public void testEmptyString() throws DatabaseUnitException, SQLException, IOException, ClassNotFoundException{ Connection con = null; con = getMyConnection(); IDatabaseConnection dbcon = new DatabaseConnection(con); // 初期データをロード IDataSet dataset = new XlsDataSet(new File(testDataDir + "/empty_string.xls")); DatabaseOperation.CLEAN_INSERT.execute(dbcon, dataset); // "NAME" 列を空文字列に更新 // UPDATE MEMBERS SET NAME='' WHERE ID=1 (new MembersExcel()).updateEmptyString(); // 期待値データをロード IDataSet expectedDataSet = new XlsDataSet(new File(testDataDir + "/empty_string-expected.xls")); ITable expectedTable = expectedDataSet.getTable("MEMBERS"); // DBのテーブルからデータを取得 IDataSet actualDataSet = dbcon.createDataSet(); ITable actualTable = actualDataSet.getTable("MEMBERS"); // 期待値と実際の値を比較 Assertion.assertEquals(expectedTable, actualTable); //=> junit.framework.ComparisonFailure: value (table=MEMBERS, row=0, col=NAME) expected:<[null]> but was:<[]> }
こういう場合も ReplacementDataSet を使えばいいみたい。xlsの側では空文字列として扱いたいセルに "[EMPTY_STRING]" と書いておく。
IDataSet expectedDataSet = new XlsDataSet(new File(testDataDir + "/empty_string-expected.xls")); ReplacementDataSet expectedDataSetReplacement = new ReplacementDataSet(expectedDataSet); expectedDataSetReplacement.addReplacementObject("[EMPTY_STRING]", ""); ITable expectedTableReplacement = expectedDataSetReplacement.getTable("MEMBERS"); // ... Assertion.assertEquals(expectedTableReplacement, actualTable);
環境
- DbUnit 2.4.8
メモ
ReplacementDataSet は IDataSet を implement しているので IDataSet.getTable() が呼べる。