リファクタリング

上のテストケースを見るとわかるのだが、初期データをDBに入れるのにsetInitDataというメソッドを作成してテストの最初で呼んでいることにしている。
「そんなもん普通にsetupにかけばいいじゃん」というのはごもっとも。
当然ボクも最初はそう考えたのでそうした。しかしそれだとエラーが出てしまうのだ。

org.seasar.framework.exception.EmptyRuntimeException:
[ESSR0007]dataSourceはnullあるいは空であってはいけません

とりあえずの回避策として上記のようなコードになったわけだが、師匠の指示によりそのあたりを追求することにする。
こういう時はソースコードを読みながら追っかけるのがいい(らしい)。(このへんのスキルはまだまだだなぁ・・・)
んでソースをおっかけると、setupメソッドが実行された後にコンテナをinit()している事が判明。
なるほど、コンテナが初期化されてない状態でデータソースを取得しようとしたから落ちたのね。
そりゃコネクションも確立してない状態でDBにアクセスしようとしたってダメだよね。
原因が分かったところで解決策を探る。すると、setUpAfterContainerInit()がコンテナの初期化後に呼ばれようになっていた。
つまりコレをオーバーライドしてそこでreadXlsReplaceDb()を実行すればいいわけだ。
んでそのようにリファクタリングをしてテストを実行したら全緑。
さっすがS2、すごいなぁ・・・と思わず感心。