えーん終わらないよぉ
すでに1週間以上の遅れ!共通部品のできの悪さが原因っていうわけじゃないからなぁ…。
と、言うわけで、自分が開発しやすい環境を無理矢理作る事にした。
環境その1:DBUnit
とにかくデータベースのデータが自由にならない、っていうかDBアクセスが重すぎる(でかいテーブルが多すぎ!)。というわけでテストデータの入れ替えを楽にする事ができるDBUnitを導入した。テストデータをExcelで準備すればかなり楽。
環境その2:HsqlDB
テスト環境とは言え好き勝手にデータをいじるのは良くないね、って事で自分のマシン上で動くデータベースを導入。テーブルを準備するのに手間取ったけどなんとかできた!大きすぎるテーブルは僕のプログラムと関係している列だけ抜粋。HsqlDBはJavaで動くのでOracleやSQLServerは言うに及ばずPostgreSQLやMySQLに比べても導入が簡単。検索のスピードは別にして、動作も軽快なので単体テスト(というよりユニットテスト)環境に最適なのだ。
環境その3:テスト用データベースアクセスクラス
beanにデータベースアクセスのインスタンスを渡してやる方式だったらDBUnit用のテストコードが簡単に書けたのだが、beanのインスタンス変数としてそれを持たせる方式(*1)なので色々と改造が必要になった。
まず、共通が用意しているデータベースアクセスクラスを継承させてテスト用のデータベースアクセスクラスを作り、メソッドをオーバーライドしまくって、HSQLDBにアクセスさせるようにする。データベースにアクセスするbeanに無理矢理データベースアクセスクラスのインスタンスを渡すメソッドを追加し(後で削除しやすいようにコメントをつけておく)、なぜか共通のデータベースアクセスクラスのインスタンスをデータベース接続処理でメモリに割り当てていたので、そこは仕方なくコメントアウトする。(*2)。これで無理矢理HSQLDBに対してプログラムが動く。勿論他の人には一切影響がないので好き放題テスト可能となる。