[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
[E-MAIL ADDRESS DELETED] 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: [E-MAIL ADDRESS DELETED]
suga
--------------------------------------------------------------
Seasar-user メーリングリストの案内