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()的一个大缺点是它不是“重构安全的”(如果更改参数的顺序,将破坏测试)
希望能有帮助