Java 如何模拟具有特定值的列表

Java 如何模拟具有特定值的列表,java,easymock,Java,Easymock,我有一个方法: expect(processor.process(arg1, list)); expectLastCall().anyTImes(); 现在,我需要列表包含某些值。问题是这些值必须以正确的顺序添加到列表中,否则列表将不等于实际列表。所以我不能仅仅创建一个新的列表并向其中添加值,因为如果方法process更改了向列表中添加值的顺序,测试就会失败。 我试过这个 List list=createMock(List.class); expect(list.add(value1)).an

我有一个方法:

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

非常感谢。

您可以使用
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)
    }    
});
expect(processor.process(arg1,list)); expectLastCall().anyTimes().andAnswer(新的IAnswer()){ public Object answer()抛出可丢弃的{ List myList=(List)EasyMock.getCurrentArguments()[1]; //在这里的列表中执行您的断言(或根据需要更改顺序) } }); 使用EasyMock.getCurrentArguments()的一个大缺点是它不是“重构安全的”(如果更改参数的顺序,将破坏测试)

希望能有帮助