当我用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模拟就可以在一行中完成所有操作?
答案 0 :(得分:4)
你想要Mockito的One liner stubs。
编辑:
经过仔细检查可能并不完全符合您的要求,但它可以为您减少一些锅炉板代码。
您正在寻找的是,正如评论所暗示的那样deep stubs。
对于你的例子,它将是:
Randomizer randomizer = mock(Randomizer.class, RETURNS_DEEP_STUBS);
when(randomizer.getRandom().nextInt(2)).thenReturn(1);