Fight the Future

Java言語とJVM、そしてJavaエコシステム全般にまつわること

DbUnitでのexcelファイル読み込み

DbUnitでexcelファイルを読み込み、DBへ登録する初期値やテスト結果の期待値を取得します。それにはorg.dbunit.dataset.excel.XlsDataSetを使います。このXlsDataSetはコンストラクタでjava.io.Fileかjava.io,InputStreamを渡します。では、DbUnitを拡張して独自にテストフレームワークを作成するとして、excelファイルはどう読み込みます??僕はクラスローダを取ってきてClassLoader#getResourceAsStream()を呼び出し、InputStreamを取得しました。クラスローダーは

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();

で取得。
それから

InputStream inputStream = classLoader.getResourceAsStream("excelファイルのフルパス");

します。
次に、excelファイルの置き場所ってどうします??僕はテストケースクラスと同じパッケージに置きました。excelのファイル名をテストメソッド名と同じにしました。eclipseでJUnitを実行すると、TestCase#getName()でテストメソッド名が取得できるので。あとはパッケージとテストメソッド名(=ファイル名)をつなげて「.」を「/」に変換し、拡張子「.xls」をつけて上記getResourceAsStream()に引数として渡します。これでexcelファイルをInputStreamにできます。
これで、XlsDataSetインスタンスを生成できるのですが、XlsDataSetは内部的にXlsTableを持ってます。イメージとしてはXlsDataSetがexcelのブック、XlsTableがexcelのシートと思ってください。
それで、ちょっと困ったこと。このXlsTableクラスがpublicじゃないんですよね。