【问题标题】:Mockito - Is it possible to deep mock a void method call to do nothing?Mockito - 是否可以深度模拟 void 方法调用以不做任何事情?
【发布时间】:2021-01-24 16:04:07
【问题描述】:

我想知道是否可以使用 Mockito 在不中断调用链的情况下“深度模拟”一个 void 方法调用。

这是我要模拟的原始调用的示例:

obj.getSomething().add(3);

其中“add”的返回类型为 void。

我试过了:

doNothing().when(obj).getSomething().add(3)

和:

doNothing().when(obj.getSomething()).add(3) //wont work since "when" expects a mock.

我在使用 Mockito.when(...) 时也失败了,因为它不适用于 void 方法。

我不想中断调用,因为对于更长的流畅 API 调用会非常麻烦。

是否有针对这种情况的官方解决方案/解决方法?

谢谢:)

【问题讨论】:

    标签: testing mocking mockito


    【解决方案1】:

    如果getSomething 返回的值不是一个mock,它将不起作用。 getSomething 的返回值应该是一个模拟,它将允许为该值分配模拟行为。

    Something someMock = mock(Something.class);
    when(obj.getSomething()).thenReturn(someMock);
    doNothing().when(someMock).add(3);
    

    【讨论】:

    • 嗨 :) 谢谢你的回答。正如我在问题中所说的那样,我知道这一点......想知道如何在不手动将流利调用中的每个链接分解为单独的模拟的情况下做到这一点。
    • 不幸的是,即使您使用Mockito.RETURNS_DEEP_STUBS,我也不知道void 方法的解决方案。它仅适用于非 void 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多