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.
_
このメソッドは、IExpectationSetters
を介して期待値のハンドルを返します。これにより、voidメソッドが呼び出されたかどうか、および関連する動作を検証(アサート)することができます。
EasyMock.expectLastCall().once();
EasyMock.expectLastCall().atLeastOnce();
EasyMock.expectLastCall().anyTimes();
IExpectationSettersの詳細なAPIは here です。
あなたの例では、ハンドルを取得しているだけで、何もしていません。したがって、ステートメントの有無による影響はありません。それは非常にgetterメソッドを呼び出すか、変数を宣言して使用しないのと同じです。
EasyMock.expectLastCall();
が必要なのは、「メソッドが呼び出されたこと」(期待値の設定と同じ)以外のことをさらに検証する必要がある場合のみです。
メソッドが呼び出された回数を確認するために、次のいずれかを追加するとします。
_EasyMock.expectLastCall().once();
EasyMock.expectLastCall().atLeastOnce();
EasyMock.expectLastCall().anyTimes();
_
または、例外をスローしたいと言います
_EasyMock.expectLastCall().andThrow()
_
気にしない場合、EasyMock.expectLastCall();
は不要であり、違いはありません。ステートメント"obj.methodThatReturnsVoid(EasyMock.<String>anyObject());"
は期待値を設定するのに十分です。
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);