2013-07-18 24 views
21

Sahte üzerinde döndürülecek birkaç farklı nesne ayarlayabilirsiniz. Ör.mockito, casus yöntemindeki nesnelerin döndürme sırasını döndürür

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

Aynı şeyleri bir şekilde bir nesneyle de yapabilir misiniz? Yukarıda şanssız bir casus üzerinde denedim. Ben

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

Ama deReturn() sadece bir parametre kabul aşağıdaki gibi bir casus üzerinde doReturn() kullanmak docs okuyun. Bir casusta belirli bir sırayla farklı objeler döndürmek istiyorum. Mümkün mü?

Aşağıdaki gibi bir sınıfım var ve test etmeye çalışıyorum. Ben anotherClass

public class myClass{ 

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

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

cevap

28

yapabilirsiniz zincir doReturn() aramalar when() önce myClass, test etmek istiyorum, bu yüzden bu (Mockito 1.9.5) çalışır: Ayrıca

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

, sana yapabileceğini bilmiyordum

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

sadece 'BDDMockito' tercih edeceğini ekleyeceğiz: Biliyorum bu kullanım .thenReturn() aramaları yanı zincirlenmiş yapmak zorunda when(x.y()).thenReturn(z1,z2), takma adlar, ancak bu kod içinde bir tercih meselesi. Bu, aşağıdakileri verecektir: "willReturn (" foo "), willReturn (" bar "). WillCallRealMethod(). Verilen (meh) .meh();' – Brice