31

我知道您可以设置几个不同的对象以在模拟中返回。前任。

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

1 回答 1

47

您可以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)
于 2013-07-18T05:06:53.567 回答