[seasar-dev:288] Re: [S2JMS] EasyMockTestCaseについて

Koichi Kobayashi koichik @ improvement.jp
2006年 3月 5日 (日) 15:00:24 JST


小林 (koichik) です.

Date:    Sun, 05 Mar 2006 12:04:09 +0900
From:    KOMORI Yusuke <y-komori @ nifty.ne.jp>
To:      seasar-dev @ ml.seasar.org
Subject: [seasar-dev:287] [S2JMS] EasyMockTestCaseについて

>  s2jca配下の EasyMockTestCase と、 S2EasyMockTestCase ですが、
> createNiceMock() メソッドがサポートされていなかったので追加しました。
> (AbstractMessageBinder のテストを行う上で欲しかったので)

どうもです.

>  あと、Subsequence クラスの reply() メソッドと、verify()メソッドですが、
> EasyMockのドキュメントを見ていると、意味合いが逆なのではないかと思います。

ここ分かりにくいですよねぇ.(^^;

> 現在は doTest() メソッドがこのようになっていますが、
>         public void doTest() throws Exception {
>             verify();
>             S2EasyMockTestCase.this.replay();
>             replay();
>             S2EasyMockTestCase.this.verify();
>             S2EasyMockTestCase.this.reset();
>         }
> 
> 本来は
>         public void doTest() throws Exception {
>             replay();
>             S2EasyMockTestCase.this.replay();
>             verify();
>             S2EasyMockTestCase.this.verify();
>             S2EasyMockTestCase.this.reset();
>         }
> で、各テストケースの中では replay() メソッドの中で expect()メソッドによ
> る動作の設定、verify() メソッドの中でテストの実施を行う方がしっくりくる
> と思うのですが、いかがでしょうか。

それはちょっと違うような.
EasyMock 的には,モックは次のようなライフサイクルを持ちます.

モックの作成
  record モード
replay()
  replay モード
verify()

expect() などでモックを設定するのは record モード,テストの実施を
するのが replay モード,最後にモックを検証するのが verify です.

なので,

>             S2EasyMockTestCase.this.replay();
>             replay();

この流れはあってます.
モックを replay() モードに設定した後で実際に replay するので.

問題は record モードでの設定を Subsequence#verify() で
やっていることなのですが,結局それが verify の内容なので,
意味は外れてないと思うのですがどうでしょう?

Subsequence の二つのメソッドが実際に実行される順番を
考えると verify() -> replay() となるので逆に感じるのだと
思いますが,自分はむしろ EasyMock の書き順が逆に感じたので
これで自然なんですよね.
それについては以下の冒頭に書いてます.

http://d.hatena.ne.jp/koichik/20050504/1115220007

もし変更するとしたら Subsequence#verify() を record() に
することになるでしょうか.
その方が EasyMock 的ではあります.


-- 
<signature>
    <name>Koichi Kobayashi</name>
    <e-mail>koichik @ improvement.jp</e-mail>
</signature>



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