2008年10月10日金曜日

S2TestCaseでの初期化処理など

 通常のTestCaseであれば、setUp() tearDown() などのメソッドをOverRideすることで初期化および終了処理をかけるのだが、S2の場合はAutoBindingによりフィールドに値がセットされるタイミングが問題となる。setUp() の中でフィールドにDIされていることを期待した処理を書くと、NPEで落ちることになる。
 そこで、S2TestCaseの動作を調べてみると、以下のような順序でS2TestCaseは処理を進めていく。(org.seasar.framework.unit.S2FrameworkTestCase#runBare() より抜粋)

setUpContainer();
setUp();
setUpForEachTestMethod();
container.init();
setUpAfterContainerInit();
bindFields();
setUpAfterBindFields();
doRunTest();
tearDownBeforeUnbindFields();
unbindFields();
tearDownBeforeContainerDestroy();
container.destroy();
tearDownForEachTestMethod();
tearDown();
tearDownContainer();

つまり、フィールドにAutoBindingでDIされた後で初期処理を入れたい場合は、setUpAfterBindFields() をOverRideするといいということだ。

0 件のコメント: