23

EasyMock を使用して単体テストを行っていますが、の使用法がわかりませんEasyMock.expectLastCall()。以下のコードでわかるように、他のオブジェクトのメソッドで呼び出される void を返すメソッドを持つオブジェクトがあります。EasyMock にそのメソッド呼び出しを期待させる必要があると思いますが、expectLastCall()呼び出しをコメントアウトしてみましたが、それでも機能します。期待される呼び出しとして登録したことをパスEasyMock.anyObject())したためですか、それとも何か他のことが起こっていますか?

MyObject obj = EasyMock.createMock(MyObject.class);
MySomething something = EasyMock.createMock(MySomething.class);
EasyMock.expect(obj.methodThatReturnsSomething()).andReturn(something);

obj.methodThatReturnsVoid(EasyMock.<String>anyObject());

// whether I comment this out or not, it works
EasyMock.expectLastCall();

EasyMock.replay(obj);

// This method calls the obj.methodThatReturnsVoid()
someOtherObject.method(obj);

EasyMock の API ドキュメントには、次のように書かれていますexpectLastCall()

Returns the expectation setter for the last expected invocation in the current thread. This method is used for expected invocations on void methods.
4

3 に答える 3

27

このメソッドは、期待値のハンドルを返しますIExpectationSetters。これにより、void メソッドが呼び出されたかどうか、および関連する動作などを検証 (アサート) することができます。

EasyMock.expectLastCall().once();
EasyMock.expectLastCall().atLeastOnce();
EasyMock.expectLastCall().anyTimes();

IExpectationSetters の詳細な API はこちらです。

あなたの例では、ハンドルを取得しているだけで、それに対して何もしていないため、ステートメントを使用または削除しても影響はありません。getter メソッドを呼び出すか、変数を宣言して使用しないのと同じです。

于 2012-12-17T15:51:41.747 に答える
3

EasyMock.expectLastCall();「メソッドが呼び出されたこと(期待値の設定と同じ)」以外をさらに検証する必要がある場合にのみ必要です。

メソッドが呼び出された回数を確認したいので、次のいずれかを追加するとします。

EasyMock.expectLastCall().once();
EasyMock.expectLastCall().atLeastOnce();
EasyMock.expectLastCall().anyTimes();

または、例外をスローしたいとします

EasyMock.expectLastCall().andThrow()

あなたが気にしないEasyMock.expectLastCall();なら、必要ではなく、何の違いもありません.あなたの声明"obj.methodThatReturnsVoid(EasyMock.<String>anyObject());"は期待を設定するのに十分です.

于 2014-04-29T06:13:03.947 に答える
1

EasyMock.verify(..) がありません

MyObject obj = EasyMock.createMock(MyObject.class);
MySomething something = EasyMock.createMock(MySomething.class);
EasyMock.expect(obj.methodThatReturnsSomething()).andReturn(something);

obj.methodThatReturnsVoid(EasyMock.<String>anyObject());

// whether I comment this out or not, it works
EasyMock.expectLastCall();

EasyMock.replay(obj);

// This method calls the obj.methodThatReturnsVoid()
someOtherObject.method(obj);

// verify that your method was called
EasyMock.verify(obj);
于 2016-08-16T20:45:41.303 に答える