2013-07-18 7 views
21

So che è possibile impostare diversi oggetti diversi per essere restituiti su una simulazione. Ex.sequenza di ritorno mockito di oggetti sul metodo spia

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

Puoi fare la stessa cosa con un oggetto spiato in qualche modo? Ho provato quanto sopra su una spia senza fortuna. Ho letto nella documentazione da utilizzare doReturn() su una spia come qui di seguito

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

Ma deReturn() accetta un solo parametro. Mi piacerebbe restituire oggetti diversi in un ordine specifico su una spia. È possibile?

Ho una classe come la seguente e sto provando a provarla. Voglio testare myClass, non anotherClass

public class myClass{ 

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

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

risposta

28

È possibile concatenare doReturn() chiamate prima when(), quindi questo funziona (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()); 
} 

Inoltre, non sapevo si potesse fare when(x.y()).thenReturn(z1,z2), quando devo fare questo uso io incatenato .thenReturn() chiamate così:

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

mi limiterò a aggiungere che io preferirei il 'BDDMockito' alias, ma è una questione di preferenza nel codice. Ciò darebbe quanto segue: 'willReturn (" foo "). WillReturn (" bar "). WillCallRealMethod(). Given (meh) .meh();' – Brice