mockito返回间谍方法上的对象序列

时间:2013-07-18 04:00:20

标签: java mockito

我知道你可以在mock上设置几个不同的对象。防爆。

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 个答案:

答案 0 :(得分:38)

您可以在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)