我正在使用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()。但似乎对我的情况不起作用。
有人可以帮我一个吗?提前谢谢!
答案 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()
被模拟,我们告诉编译器只返回一次答案!
希望这有帮助!
祝你好运!