【问题标题】:Mockito: 0 matcher expected, 1 recordedMockito:预期 0 个匹配器,记录 1 个
【发布时间】:2021-08-27 21:29:13
【问题描述】:

我得到了:- 参数匹配器的使用无效! 预期 0 个匹配器,记录 1 个: 在InputStreamResource isr=new InputStreamResource(new ByteArrayInputStream(anyString().getBytes()));

【问题讨论】:

  • 我们只能模拟对模拟对象的调用。因此,我们应该定义InputStreamResource isr = mock(InputStreamReader.class);。不过,我不太确定您要通过“mocked”构造函数调用来实现什么。
  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: java spring unit-testing object mockito


【解决方案1】:

anyString() 是一个argument matcher。它不能用于“代数”意义(代表一般程序逻辑中的任何值)或“任意值提供者”意义(其中它将提供任意字符串或其他值以确保您的测试有效)。相反,它旨在将您的期望与与您的模拟的实际交互相匹配,预先确定适当的返回值或行为 (when) 或之后断言调用发生 (verify )。

匹配器规则:

  • 匹配器来自ArgumentMatchersAdditionalMatchers 对象的静态方法调用。 MockitoHamcrest.argThatArgumentCaptor.capture 也算在内。
  • 您只能在对when 的调用中使用它,如when(mock.method(argumentOrMatcher))).thenVerbdoVerb(...).when(mock).method(argumentOrMatcher),或verify,如verify(mock).method(argumentOrMatcher)
  • 匹配器必须替换整个参数;您不能对匹配器返回的值调用方法,并且它不能出现在任何其他调用中(除了其他匹配器,如 AdditionalMatchers.and)。
  • 由于 Mockito 的工作方式,您需要保持一致:在对 whenverify 的给定调用中,所有参数都必须是匹配器,或者它们都不能是匹配器(其中每个大小写都与Object.equalsArgumentMatchers.eq 匹配)。

因为您在这些规则之外使用了匹配器,所以记录了 1 个匹配器,其中预计有 0 个匹配器。您需要使用您当前拥有anyString 的任意值编写测试。如果您的测试仍然需要 Mockito,您可以将相同的字符串传递给 whenverify,或者在需要时使用类似 anyString 的匹配器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 2014-12-12
    • 2011-09-26
    • 2021-09-24
    • 1970-01-01
    • 2011-01-18
    相关资源
    最近更新 更多