[Seasar-user:11210] Re: [S2JUnit4]@Mockアノテーションの使い方について

Toshihiro Nakamura [E-MAIL ADDRESS DELETED]
2007年 10月 23日 (火) 12:26:13 JST


中村(taedium)です。

> S2JUnit4で@Mockアノテーションの target要素、pointcut要素、returnValue要素に
> 何を指定すればいいのかよくわからないのですが、
> 私が一応認識していることを書きますと、
> 
> target = モックをつくるDaoのクラス
> 
> pointcut = Daoのメソッド名
> 
> returnValue = Daoのメソッドが返す戻り値
> 
> ということでいいのでしょうか?

だいたい合っています。
@Mockでは、コンポーネントにMockInterceptorを適用します。、
targetにはインタセプターの適用先となるコンポーネントのクラスを指します。
クラスで一意に特定できない場合はtargetNameを使ってください。
(内部的にはtargetもしくはtargetNameに指定された値
をキーとしてS2ContainerからgetCompornentしています。)

pointcutには正規表現を使うこともできます。

> それと、returnValue要素にentityのクラスを指定したいのですが、例えば、
> returnValue = "'Book'"
> としても
> java.lang.String
> として、扱われてしまうようです。
> どのように指定すればいいのでしょうか?

returnValue = "new hoge.Book()"

としたり

@Mock(target = BookDao.class, pointcut = ".*", returnValue = "createBook()")
public void test() {
    ...
}
public Book createBook() {
    ・・・
    return book;
}

としてエンティティを生成するメソッドを呼ぶこともできます。
ただし、returnValueの中でメソッドを呼ぶ場合はそのメソッドは
publicとして宣言しておく必要があります。

-- 
Toshihiro Nakamura <[E-MAIL ADDRESS DELETED]>




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