一次在Mockito进行两次连续的方法调用?

时间:2013-02-03 21:17:00

标签: java junit mockito

当我用Mockito编写单元测试时,我经常会发现我在一个注入的模拟中调用了一个getter,然后从返回的对象中调用一个方法。

到目前为止,我已经完成了这样的事情:

    @Mock
    private Randomizer r;
    @Mock
    private Random random;
    @InjectMocks
    private NodeGenerator ng = new NodeGenerator();

    @Test
    public void nodeIsDuplicate() {

        when(r.getRandom()).thenReturn(random);
        when(random.nextInt(2)).thenReturn(1);
        [...]
    }

但是,为了它而不得不模拟随机并设置第二个似乎是浪费。有没有办法让我的时间陈述更像:

when(r.getRandom().nextInt(2)).thenReturn(1);

无需模拟随机,所以我只需使用Randomizer模拟就可以在一行中完成所有操作?

1 个答案:

答案 0 :(得分:4)

你想要Mockito的One liner stubs

编辑:

经过仔细检查可能并不完全符合您的要求,但它可以为您减少一些锅炉板代码。

您正在寻找的是,正如评论所暗示的那样deep stubs

对于你的例子,它将是:

Randomizer randomizer = mock(Randomizer.class, RETURNS_DEEP_STUBS);

when(randomizer.getRandom().nextInt(2)).thenReturn(1);
相关问题