web-dev-qa-db-ja.com

voidメソッドを使用したEasyMockの期待

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.
_
20

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

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

IExpectationSettersの詳細なAPIは here です。

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

25
Yogendra Singh

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

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

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

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

_EasyMock.expectLastCall().andThrow()
_

気にしない場合、EasyMock.expectLastCall();は不要であり、違いはありません。ステートメント"obj.methodThatReturnsVoid(EasyMock.<String>anyObject());"は期待値を設定するのに十分です。

2
Nisarg

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);
0
juandiegoh