2013-07-18 2 views
21

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

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(); 
    } 
} 

ответ

28

Вы можете цепи 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) 
+0

Я просто добавить, что я предпочел бы 'BDDMockito' псевдонимов, но это вопрос предпочтения в коде. Это даст следующее: 'willReturn (" foo "). WillReturn (" bar "). WillCallRealMethod(). Given (meh) .meh();' – Brice

Смежные вопросы