Подтвердить что ты не робот

Mockito возвращает последовательность объектов по шпионскому методу

Я знаю, что вы можете установить несколько разных объектов, которые будут возвращены макету. Ex.

when(someObject.getObject()).thenReturn(object1,object2,object3);

Можете ли вы сделать то же самое со шпионским объектом? Я пробовал выше на шпионах, не повезло. Я прочитал в документах, чтобы использовать doReturn() для шпиона, как показано ниже

doReturn("foo").when(spy).get(0);

Но deReturn() принимает только один параметр. Я хотел бы вернуть разные объекты в определенном порядке на шпиона. Возможно ли это?

У меня есть класс вроде следующего, и я пытаюсь его протестировать. Я хочу протестировать myClass, а не anotherClass

public class myClass{

    //class code that needs several instances of `anotherClass`

    public anotherClass getObject(){
        return new anotherClass();
    }
}
4b9b3361

Ответ 1

Вы можете связать вызовы doReturn() до when(), так что это работает (mockito 1.9.5):

private static class Meh
{
    public String meh() { return "meh"; }
}

@Test
public void testMeh()
{
    final Meh meh = spy(new Meh());

    doReturn("foo").doReturn("bar").doCallRealMethod().when(meh).meh();

    assertEquals("foo", meh.meh());
    assertEquals("bar", meh.meh());
    assertEquals("meh", meh.meh());
}

Кроме того, я не знал, что вы могли бы сделать when(x.y()).thenReturn(z1,z2), когда я должен это сделать, я также использую вызовы с цепочкой .thenReturn():

when(x.y()).thenReturn(z1).thenThrow().thenReturn(z2)