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