[Seasar-user:10772] 【S2TigerTestCase】 EasyMock利用時のモッククラスのコンポーネント化とDIについて
[E-MAIL ADDRESS DELETED]
[E-MAIL ADDRESS DELETED]
2007年 9月 28日 (金) 21:48:45 JST
奥田と申します。
S2Tiger の S2TigerTestCase の EasyMock機能の使い方についてご教授ください。
JUnitでテスト対象のクラスがDIするクラスを
EasyMockを使ってJUnit上のソースに記述出来ると言う認識で利用しようとしています。
別途DIされるMockクラスを都度作って、diconに記述してバインドさせることは
できたのですがこれは非常に手間がかかるため、EasyMockを利用したいと考えています。
それで、JUnitでDIされたいクラスに@EasyMock(register=true)アノテーションを
追加しているのですが、コンポーネント化されないためにDIされません。
EasyMockを利用して作った、プロキシークラスを
diconでコンポーネント化したクラスにDIさせるのに何か参考になる資料はありますか?
http://s2container.seasar.org/2.4/ja/easyMock.html
のページは目を通しました。
説明にある「S2EasyMockTestCase」は古い(?)様ですので
代わりに「S2TigerTestCase」を利用しています。
環境は
JUnit 3.8.1
S2container 2.4.17
S2tiger 2.4.17
です。
概念的には以下のようなソースでテストを実行させようとしています。
■HogeTest.java
public class HogeTest extends S2TigerTestCase{
private Oya oya;
// DIされたいクラス
@EasyMock(register=true)
private Kodomo kodomo;
protected void setUP(){
include("test.dicon");
}
// EasyMockのレコードメソッドで簡単モック作成
public void recordKensyou(){
expect(kodomo.say()).andReturn("おはよう");
}
// ★ 検証対象
public void testKensyou(){
String response = oya.say();
// 実装は「おやすみなさい」となっているが、モックの返り値である「おはよう」が欲しい
System.out.println(response);
}
}
■HogeTest.dicon
<!-- 親を実体化 -->
<component class="jp.hoge.OyaImpl">
<interType><component class="org.seasar.framework.aop.intertype.PropertyInterType"/></inte
rType>
</component>
<!-- 子はいらない?(EasyMockを利用するため) -->
■OyaImpl.java
public class OyaImpl implements Oya{
@Property(PropertyType.READWRITE)
protected Kodomo kodomo;
public String say(){
return kodomo.say();
}
}
■KodomoImpl.java
public class KodomoImpl implements Kodomo{
public String say(){
return "おやすみなさい";
}
}
以上、よろしくお願いします。
Seasar-user メーリングリストの案内