私の単体テストでは、EasyMockを使用してモックオブジェクトを作成しています。私のテストコードには次のようなものがあります
_EasyMock.expect(mockObject.someMethod(anyObject())).andReturn(1.5);
_
したがって、EasyMockはsomeMethod()
へのすべての呼び出しを受け入れるようになりました。 mockObject.someMethod()
に渡される実際の値を取得する方法はありますか、またはすべての可能な場合にEasyMock.expect()
ステートメントを記述する必要がありますか?
Capture
クラスを使用して、パラメーター値を予期およびキャプチャできます。
_Capture capturedArgument = new Capture();
EasyMock.expect(mockObject.someMethod(EasyMock.capture(capturedArgument)).andReturn(1.5);
Assert.assertEquals(expectedValue, capturedArgument.getValue());
_
Capture
はジェネリック型であり、引数クラスを使用してパラメーター化できることに注意してください。
_Capture<Integer> integerArgument = new Capture<Integer>();
_
更新:
expect
定義の引数ごとに異なる値を返したい場合は、andAnswer
メソッドを使用できます。
_EasyMock.expect(mockObject.someMethod(EasyMock.capture(integerArgument)).andAnswer(
new IAnswer<Integer>() {
@Override
public Integer answer() {
return integerArgument.getValue(); // captured value if available at this point
}
}
);
_
コメントで指摘されているように、別のオプションは、answer
内でgetCurrentArguments()
呼び出しを使用することです。
_EasyMock.expect(mockObject.someMethod(anyObject()).andAnswer(
new IAnswer<Integer>() {
@Override
public Integer answer() {
return (Integer) EasyMock.getCurrentArguments()[0];
}
}
);
_