EasyMock期望方法在for循环中返回多个不同的对象

时间:2015-03-06 16:50:43

标签: java return easymock

我正在使用EasyMock对我的Java代码进行单元测试。在我的模拟列表中,我想在调用get方法时为每个元素,我想返回一个不同的值。

例如:

List<SearchResult> results = new ArrayList<>();
        results.add(fControl.createMock(SearchResult.class));
        results.add(fControl.createMock(SearchResult.class));

for (SearchResult result : results) {
    EasyMock.expect(result.getFieldValue(Ref.ID)).andReturn("name:23:1")
}
fControl.replay();

第一次,我希望它返回“name1:23:1”, 对于第二个元素,我希望它返回“name2:23:2”。

我知道简单的模拟有一个EasyMock.expect()。andReturn()。once()。但似乎对我的情况不起作用。

有人可以帮我一个吗?提前谢谢!

1 个答案:

答案 0 :(得分:0)

你应该这样做。

EasyMock.expect(resultEasyMockObject.getFieldValue(Ref.ID)).andReturn("name:23:1").times(1);
EasyMock.expect(resultEasyMockObject.getFieldValue(Ref.ID)).andReturn("name:34:2").times(1);
EasyMock.expect(resultEasyMockObject.getFieldValue(Ref.ID)).andReturn("name:45:3").times(1);

你的for循环中发生的是与resultObject相同的方法多次被模拟并且只有最后一个模拟保持有效,因此当你运行测试类时,你只接收最后一个模拟值作为输出。

通过不使用for循环来实现它将实现getFieldValue()被模拟,我们告诉编译器只返回一次答案!

希望这有帮助!

祝你好运!