Как смоделировать список, который будет иметь определенные значения - PullRequest
2 голосов
/ 28 марта 2011

У меня есть метод:

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

Большое спасибо.

1 Ответ

2 голосов
/ 28 марта 2011

Вы можете использовать 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 () заключается в том, что он не является "безопасным для рефактора" (если вы измените порядок параметров, это нарушит тест).

Надеюсь, это поможет.

...