0

当我使用 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 语句更像:

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

无需模拟随机数,所以我可以只用我的 Randomizer 模拟在一条线上完成所有操作?

4

1 回答 1

4

你想要 Mockito 的One liner stubs

编辑:

经过仔细检查,这可能不是您正在寻找的内容,但它可以为您减少一些样板代码。

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

对于您的示例,它将是:

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

when(randomizer.getRandom().nextInt(2)).thenReturn(1);
于 2013-02-03T21:21:32.380 回答