我有一个方法:
expect(processor.process(arg1, list));
expectLastCall().anyTImes();
现在,我需要列表包含某些值。问题是必须以正确的顺序将值添加到列表中,否则列表将不等于真实列表。所以我不能只创建一个新列表并在其中添加值,因为如果方法process
改变了将值添加到列表中的顺序,则测试将失败。
我试过这个
List list=createMock(List.class);
expect(list.add(value1)).andReturn(true);
expect(lst.add(value2)).andReturn(true);
但他给出了这个例外:
java.lang.AssertionError:
Unexpected method call process(arg, [Listvalue1,Listvalue2]):
process(arg, EasyMock for interface java.util.List): expected: 1, actual: 0
非常感谢。
答案 0 :(得分:2)
您可以使用IAnswer
和EasyMock.getCurrentArguments()
,然后手动断言列表的内容
expect(processor.process(arg1, list));
expectLastCall().anyTimes().andAnswer(new IAnswer<Object>() {
public Object answer() throws Throwable {
List myList = (List) EasyMock.getCurrentArguments()[1];
// do your assertions on the list here (or change the order as required)
}
});
使用EasyMock.getCurrentArguments()的一个重大缺点是它不是“重构安全”(如果你更改参数的顺序,它将破坏测试)。
希望它有所帮助。