[Seasar-user:5936] [S2Unit]Test実行単位で唯一のContainerにはできないでしょうか?

kubo [E-MAIL ADDRESS DELETED]
2007年 1月 29日 (月) 12:08:22 JST


久保(jflute)です。

Teeda-1.0.3       ※3月中旬頃までは常に最新を反映
S2Container-2.4.8 ※同上
S2Dao-1.0.40      ※同上
DBFlute-0.4.0     ※同上
JUnit-3.8.2

[Seasar-user:5886]のClassLoaderの話とは別に、
ちょっとS2Unit周りでの要望をさせて下さい。

現状のS2Unitですが、Methodの呼び出し毎に
Containerを生成・破棄しています。

これをOptionでTest実行単位で唯一のContainerに変更するような
仕様を付け加えることはできないでしょうか?


現状の「Methodの呼び出し毎生成・破棄」の目的は、
Mockを利用してのTestを実現するためかと思います。
(Method毎にIncludeするDiconが変わる)

確かにそれはそれで必要なのですが、
現在自分が携わっているProjectでのUnitTestの方針では、

  Componentは極力Pojoとして作成し、
  UnitTestではそのPojoを new して必要なAttributeを
  TestMethod内で setして、TargetのMethodを呼び出してAssertする。
  (Mockに関しては、UnitTest内で new して set してあげる)

というやり方をしています。

なので、UnitTestの中では、常にContainerの状態は
固定でも平気な状態であります。


「Methodの呼び出し毎生成・破棄」だと何が問題かと言うと、
UnitTestの全実行のPerformanceです。
  ※TestClass毎に必要なdiconだけをincludeするように
    していますがそれでもやはり遅いです。

本来、開発者には
「Commit前には全部のTest実行してDegradeしてないことを確認」
を方針とさせたいと思うのですが、
現状それをやるとTest実行時間が長すぎて現実的ではありません。
結局、それが原因で徹底できないので、関連しそうなTestを
個人の判断で幾つか動かしてCommitという運用になっています。


S2FrameworkTestCaseとS2TestCaseの「完全Copy+独自修正」な感じで
独自でTestCaseを作成しようかなとも思ったのですが、
S2FrameworkTestCaseのbindFields()あたりの処理は共通ですし、
S2TestCaseはそのままでOKなので、Seasar本体にその機能が
あった方がいいかなと思いました。


例えば
S2FrameworkTestCaseのあるMethodをOverrideしてtrueを返すと
「Test実行単位で唯一のContainer」を利用するようになる
というような仕様は如何でしょうか?





-- 
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
kubo   <[E-MAIL ADDRESS DELETED]>
jflute <http://d.hatena.ne.jp/jflute>
株式会社ビルドシステム <http://www.buildsystem.co.jp>
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/





Seasar-user メーリングリストの案内