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

标签 java unit-testing easymock

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

相关文章:

Java - 遍历目录中的所有文件

java - 以编程方式重新启动可作为 Windows 服务运行的 Java 应用程序

java - JERSEY : Error Trace : java. lang.IllegalStateException: 实体输入流已经关闭

java - JUnit 多次运行测试

junit4 - Junit 使用模拟对象

java - JSF - JUnit FacesContext 模拟测试

java - 如何从 JSP 刷新/访问模型

visual-studio - 确定哪些类最能从单元测试中受益?

c# - 关于单元测试和犀牛模拟的一些问题

java - 如何根据模拟请求 JUnit4 测试 Spring 的 el-Expressions?