2013-07-18 14 views
21

Wiem, że możesz ustawić kilka różnych obiektów, które mają zostać zwrócone na próbę. Dawny.Powtórz sekwencję zwrotów obiektów na metodzie szpiegowskiej

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

Czy możesz zrobić to samo z jakimś szpiegującym obiektem? Spróbowałem tego na szpiegu bez powodzenia. Czytałem w docs użyć doReturn() na szpiega jak poniżej

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

Ale deReturn() akceptuje tylko jeden parametr. Chciałbym zwrócić różne przedmioty w określonej kolejności na szpiega. czy to możliwe?

Mam klasę podobną do poniższej i próbuję ją przetestować. Chcę przetestować myClass, nie anotherClass

public class myClass{ 

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

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

Odpowiedz

28

Można łańcuch doReturn() rozmowy przed when(), więc to działa (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()); 
} 

Także, ja nie wiedziałem, że można zrobić when(x.y()).thenReturn(z1,z2), kiedy mam to zrobić użycie ja przykuty .thenReturn() połączeń, a także:

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

dodam tylko, że wolałbym 'BDDMockito' aliasy, ale jest to kwestia preferencji w kodzie. Dałoby to następujące: 'willReturn (" foo "). WillReturn (" bar "). WillCallRealMethod(). Given (meh) .meh();' – Brice