Как заставить макет EasyMock возвращать пустой список несколько раз

Я хотел бы, чтобы макет EasyMock мог ожидать пустой список несколько раз, даже если в список, возвращаемый в первый раз, добавлены элементы.

Это возможно? Поскольку пустой список, созданный в ожидании, сохраняется для всего воспроизведения и, таким образом, сохраняет любые элементы, добавленные к нему между вызовами.

Вот пример кода, показывающий, чего я пытаюсь избежать:

public class FakeTest {

private interface Blah {

    public List<String> getStuff();
};

@Test
public void theTest(){

    Blah blah = EasyMock.createMock(Blah.class);

    //Whenever you call getStuff() an empty list should be returned
    EasyMock.expect(blah.getStuff()).andReturn(new ArrayList<String>()).anyTimes();

    EasyMock.replay(blah);

    //should be an empty list
    List<String> returnedList = blah.getStuff();
    System.out.println(returnedList);

    //add something to the list
    returnedList.add("SomeString");
    System.out.println(returnedList);

    //reinitialise the list with what we hope is an empty list
    returnedList = blah.getStuff();

    //it still contains the added element
    System.out.println(returnedList);

    EasyMock.verify(blah);
}
}

person insano10    schedule 04.02.2011    source источник


Ответы (1)


Вы можете использовать andStubReturn для создания нового списка каждый раз.

//Whenever you call getStuff() an empty list should be returned
EasyMock.expect(blah.getStuff()).andStubAnswer(new IAnswer<List<String>>() {
        @Override
        public List<Object> answer() throws Throwable {
            return new ArrayList<String>();
        }
    }
person mkrussel    schedule 04.02.2011