当我使用 Mockito 编写单元测试时,我经常会发现我在注入(inject)的模拟之一上调用 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);
无需模拟随机数,因此我可以仅使用随机化器模拟在一行中完成所有操作?
最佳答案
你想要 Mockito 的 One liner stubs .
编辑:
经过仔细检查,这可能并不完全是您正在寻找的内容,但它可以为您减少一些样板代码。
您正在寻找的是,确实如评论所示,deep stubs .
对于您的示例,它是:
Randomizer randomizer = mock(Randomizer.class, RETURNS_DEEP_STUBS);
when(randomizer.getRandom().nextInt(2)).thenReturn(1);
关于java - Mockito 中连续两次方法调用何时发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14677408/