Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java EasyMock expect方法在for循环中返回多个不同的对象_Java_Return_Easymock - Fatal编程技术网

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

Java EasyMock expect方法在for循环中返回多个不同的对象,java,return,easymock,Java,Return,Easymock,我正在使用EasyMock对我的Java代码进行单元测试。在模拟列表中,我希望在调用get方法时,为每个元素返回不同的值 例如: List<SearchResult> results = new ArrayList<>(); results.add(fControl.createMock(SearchResult.class)); results.add(fControl.createMock(SearchResult.class));

我正在使用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();
List results=new ArrayList();
添加(fControl.createMock(SearchResult.class));
添加(fControl.createMock(SearchResult.class));
for(搜索结果:结果){
EasyMock.expect(result.getFieldValue(Ref.ID)).andReturn(“名称:23:1”)
}
fControl.replay();
第一次,我希望它返回“name1:23:1”, 对于第二个元素,我希望它返回“name2:23:2”

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


谁能帮我个忙吗?提前谢谢

你应该这样做

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()
被模拟,我们告诉编译器只返回一次答案

希望这有帮助


祝你好运

不,我认为这并不能解决我的问题,因为在每个循环中,“result”是一个新对象,所以即使将“times”设置为1,它也会返回与上一个循环相同的值。