gpt4 book ai didi

java - EasyMock:获取 EasyMock.anyObject() 的真实参数值?

转载 作者:搜寻专家 更新时间:2023-10-30 19:53:05 27 4
gpt4 key购买 nike

在我的单元测试中,我使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com