[Seasar-user:1650] Re: S2Unit で同一インターフェースを持つ複数のコンポーネントの使用について

suga suga_k
2005年 3月 20日 (日) 19:43:58 JST


suga です。

On Sun, 20 Mar 2005 19:14:02 +0900
his @ hamal.freemail.ne.jp wrote:

>  S2Unitを使用してテストする際に、
>  同一インターフェースを複数のコンポーネントとして登録すると、
>  TooManyRegistrationRuntimeExceptionが発生してしまいます。
>  この現象を回避する方法はあるのでしょうか?S2のバージョンは2.2.3です。
>  
> 
>  1.TestCaseのstaticでもないfinalでもないフィールドがあり、
>    その名前からアンダースコア(_)を除いた名前のコンポーネントが
>    コンテナに存在すれば自動的にセットされます。 
>  2.TestCaseのフィールドにインターフェース型の変数が定義されていれば
>    S2Containerから取り出して自動的にセットされます。 
> 
>  と、サイトのドキュメントにありますが、名前を併せても同型のインターフェースでは
>  無理のようです。

CVS 最新版で動作確認しました。
ちゃんと動作しますね。

IBar という interface を実装している BarOne, BarTwo があり、dicon には
以下のように記述。
<component name="bar1" class="test.BarOne" />
<component name="bar2" class="test.BarTwo" />

TestCase ではフィールドに宣言
private IBar bar1;
private IBar bar2;

これで正しくインジェクションされます。

public void setUp() {
    include("Test.dicon");
}
public void testHoge() {
    System.out.println(bar1.getClass().getName());
    System.out.println(bar2.getClass().getName());
}
結果
test.BarOne
test.BarTwo



TooManyRegistrationRuntimeException は、コンポーネント間で発生している
ということはありませんか?
その interface を自動で受け取るようになっているコンポーネントが登録
されている場合、通常の利用と同じで、例外が発生します。
もしそうなら、マニュアル設定すれば回避できます。

--------------------------------------------------------------
 e-mail: suga_k @ rmail.plala.or.jp
                                              suga
--------------------------------------------------------------


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