[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 メーリングリストの案内