[Seasar-user:16297] Re: [s2-container] あるテストのときだけMockInterceptorを使ったMockに置き換えたいとき

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2008年 11月 13日 (木) 22:00:03 JST


小林 (koichik) です.

Date:    Thu, 13 Nov 2008 21:01:45 +0900
From:    "Mitsutaka Sato" <[E-MAIL ADDRESS DELETED]>
To:      seasar-user <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:16296] [s2-container] あるテストのときだけMockInterceptorを使ったMockに置き換えたいとき

> HogeServiceのテストケースで、hogeLogicをMockInterceptorを使ったMockに置き換えたいとき、
> どのようにすればよいでしょうか?
> 
> HogeLogicはlogic.diconに
>     <component
>         class="com.hoge.impl.HogeLogicImpl"
>         instance="prototype">
>         <aspect>j2ee.requiredTx</aspect>
>     </component>
> のように定義されていて、
> 
> mock.dicon に
>     <component name="mockInterceptor"
> 
> class="org.seasar.framework.aop.interceptors.MockInterceptor">
>         <initMethod name="setReturnValue">
>             <arg>"getCenterSeq"</arg>
>             <arg>"9998000001"</arg>
>         </initMethod>
>     </component>
>     <component
>         class="com.hoge.HogeLogic"
>         instance="prototype">
>         <aspect>mockInterceptor</aspect>
>     </component>
> と書いて、
> 
> app.diconでは
> mock.diconとlogic.diconをincludeしました。
> 順番を入れ替えてみても、実態(HogeLogicImpl)のほうがセットされてしまいます。

実際には logic.dicon の定義だけコンポーネント名が
指定されていないでしょうか?

もしそうなら,mock.dicon でもコンポーネント名を
指定してください.

    <component
        name="hogeLogic"
        class="com.hoge.HogeLogic"
        instance="prototype">

Seasar2.4 では最初にコンポーネントを名前で検索します.
そのため,片方だけ名前が指定されていると,常にそちらが
DI されます.

> logic.diconをincludeしなければいいだけの話なんですが、他にもたくさん登録されているので。
> 横着できる方法はないかと。
> 
> 同じインターフェースを持つComponentの場合、優先される順位とかあるんでしょうか?

あります.
app.dicon が foo.dicon と bar.dicon をこの順で
インクルードし,foo.dicon が baz.dicon を
インクルードしている場合,

app.dicon
  foo.dicon
    baz.dicon
  bar.dicon

app.dicon に定義されているコンポーネントからは,
上記の順番で優先的に見えます.
つまり,

・app.dicon がもっとも優先
・foo.dicon は bar.dicon や baz.dicon より優先
・baz.dicon は bar.dicon より優先

となります.
こちらの図も参考にしてください.

http://s2container.seasar.org/2.4/s2-framework/ja/apidocs/org/seasar/framework/container/S2Container.html


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