java - Mockito 中连续两次方法调用何时发生?

标签 java junit mockito

当我使用 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/

相关文章:

java - 在java中使用charAt

java - 需要编写 JUnit 测试用例

java - 如何使用 mockito 为 Controller 类编写单元测试用例

java - Selenium 上传文件 : file not found [docker]

java - 最后一次尝试 SSL/TLS

java - java中的方法重写中两个方法可以有不同的返回类型吗

java - 用 1 个测试测试多个类

java - Mockito 验证一个方法在 spy 之后被调用一次,尽管它永远不会被调用

java - 单元测试中的请求范围 bean 管理

java - 将 Powermock 与 Weld 混合使用?