【问题标题】:Using Mockito to verify the number of times any of several methods have been invoked使用 Mockito 验证几种方法中的任何一种被调用的次数
【发布时间】:2022-11-15 23:59:20
【问题描述】:

如果我想验证没有错误或一些错误已被记录,但有多种错误记录方法,我可以像这样笨拙地做一些事情:

Logger log = mock(Logger.class);
boolean errorsExpected;
...
if (errorsExpected) {
    try {
        verify(log, atLeastOnce()).error(any());
    } catch (AssertionError e) {
        verify(log, atLeastOnce()).error(any(), any());
    }
} else {
    verify(log, never()).error(any());
    verify(log, never()).error(any(), any());
}

有没有更好的办法?

【问题讨论】:

标签: java unit-testing mockito


【解决方案1】:

这不是 Mockito 擅长的事情,但除非您需要任何聪明的 Mockito 匹配器功能来匹配错误,否则您可以自己编写一个假的 Logger。

为此,实现 Logger——使用 Java 手动或动态使用 Mockito thenAnswers——并让每个调用递增一个计数器或将其参数保存到一个数组中。在测试结束时,您可以检查错误计数或进行您需要的任何其他查询。

如果多个测试组件调用您的 Logger,您可以编写一次伪实现并将其用于所有单元测试和小型集成测试中所需的所有查询。

这类似于 Android 测试库 Robolectric 使用其 ShadowLog.getLogs implementation 所做的,尽管 Robolectric 使用自定义类加载器来替换 Log 类,因为它的静态方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 2017-02-18
    相关资源
    最近更新 更多