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();
}
}
Ответы
Ответ 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)