在我的单元测试中,我使用 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];
}
}
);
关于java - EasyMock:获取 EasyMock.anyObject() 的真实参数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21005775/