[Seasar-user:17485] Re: [S2 Container, Tiger 2.4.36] S2JUnit4 + Cool Deployモードでテストが失敗してしまう問題について

Toshiaki Takashima [E-MAIL ADDRESS DELETED]
2009年 5月 19日 (火) 16:38:36 JST


小林様 中村様

 高島です。

 S2JUnit4のメカニズムをご説明いただき、ありがとう
ございます。

> しかし S2Unit4 ではルートのコンテナは対応する
> dicon を持っていない空のコンテナで,作成された
> 時点で cooldeploy-autoregister.dicon の 
> <include> が追加され,その後に app.dicon の
> <include> が追加されます.そのため,
> 
> <include path="cooldeploy-autoregister.dicon"/>
> <include path="app.dicon"/>
> 
> と書いたかのようになります.

 とても勉強になりました。@RootDiconアノテーション
をテスト側に付与すると正常動作することも確認しました。

 私の感想としましては、S2JUnit4によるテスト時も、

> <include path="app.dicon"/>
> <include path="cooldeploy-autoregister.dicon"/>


という、通常アプリ起動時と同じ追加順のイメージで
動作してくれた方が、利用者側で混乱しないと思うので
すが、いかがでしょうか?


 そもそも単体テストについてはWarm Deployで、と
いう方針だとは思うのですが、一度くらいは運用環境と
同じCool Deployモードで動作確認しておきたいとも思
いますので。




以上ご検討よろしくお願いします

> 小林 (koichik) です.
> 
> Date:    Tue, 19 May 2009 15:17:03 +0900
> From:    Toshiaki Takashima <[E-MAIL ADDRESS DELETED]>
> To:      [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:17480] Re: [S2 Container, Tiger 2.4.36] S2JUnit4 + Cool Deployモードでテストが失敗してしまう問題について
> 
> > S2JUnit4を利用しない場合のCool Deploy(mainメソッド
> > でSingletonS2ContainerFactory.init()を実行)は問題
> > なく成功することを確認しているのですが、同じ問題
> > (コンテナ初期化前のコンポーネント取得による処理失敗)
> > が発生しないのは、なぜなのでしょうか?
> 
> 通常は app.dicon がルートのコンテナに読み込まれ,
> <include> の最後に COOL deploy の自動登録を行う
> cooldeploy-autoregister.dicon の <include> が
> 追加されるので,
> 
> <include path="s2jdbc-internal.dicon"/>
> <include path="cooldeploy-autoregister.dicon"/>
> 
> と書いたかのようになります.
> この場合,s2jdbc-internal.dicon が初期化され,
> EntityMetaFactory が登録された後に COOL deploy の
> 自動登録が行われるので,EntityUtil がロードされた
> 時点で EntityMetaFactory を取得することが出来ます.
> 
> しかし S2Unit4 ではルートのコンテナは対応する
> dicon を持っていない空のコンテナで,作成された
> 時点で cooldeploy-autoregister.dicon の 
> <include> が追加され,その後に app.dicon の
> <include> が追加されます.そのため,
> 
> <include path="cooldeploy-autoregister.dicon"/>
> <include path="app.dicon"/>
> 
> と書いたかのようになります.
> 
> そのため,COOL deploy の自動登録が行われる
> 時点では app.dicon および s2jdbc-internal.dicon は
> 初期化されていません.
> s2jdbc-internal.dicon は初期化時に AutoRegister で
> EntityMetaFactory を自動登録するので,この時点では
> まだコンテナに登録されていないことになります.
> 
> s2junit4.dicon で app.dicon をインクルードせずに,
> @RootDicon アノテーションで app.dicon を指定すれば
> [Seasar-user:17476] や [Seasar-user:17481] の
> 対応をしなくても動作するかもしれません.
> 
> http://s2container.seasar.org/2.4/ja/S2JUnit4.html#rootDiconAnnotation
> 
> 
> -- 
> <component name="koichik">
>     <property name="fullName">"Koichi Kobayashi"</property>
>     <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
>     <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
> </component>
> 
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user





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