Ответ 1
Вы можете использовать класс 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>();
Update:
Если вы хотите возвращать разные значения для разных аргументов в определении 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
}
}
);
Как указано в комментариях, другой вариант заключается в использовании вызова getCurrentArguments()
внутри answer
:
EasyMock.expect(mockObject.someMethod(anyObject()).andAnswer(
new IAnswer<Integer>() {
@Override
public Integer answer() {
return (Integer) EasyMock.getCurrentArguments()[0];
}
}
);