【问题标题】:org.mockito.exceptions.misusing.InvalidUseOfMatchersException' exceptionorg.mockito.exceptions.misusing.InvalidUseOfMatchersException' 异常
【发布时间】:2019-08-15 16:32:21
【问题描述】:

我查看了许多有关 Stack Overflow 的相关问题,但没有找到匹配项。

我正在使用 Mockito 并尝试为具有以下签名的方法创建自定义参数匹配器。

public ClusterViewMember getPersonWithTreeInfo(Gid clusterGid, Gid memberGid, boolean retBlob) throws Exception

代码因“InvalidUseOfMatchersException”而失败。整个异常消息是:

Method threw 'org.mockito.exceptions.misusing.InvalidUseOfMatchersException' exception. Cannot evaluate com.xxx.yyy.services.pm3cache.provider.PmCacheProvider$$EnhancerByMockitoWithCGLIB$$c81cff41.toString()

代码行因空指针异常而失败。我通过在调试模式下单步执行找到了 Mockito 异常。单独的代码行如下。

when(pmCacheProvider.getPersonWithTreeInfo(any(), any(), any())).thenReturn(new ClusterViewMember());

最后 - 整个测试方法如下。

2 注释:

  1. 执行未超过“何时”行 - 这就是发生错误的地方。

  2. 我正在调用的 Foo(提供程序)中的方法最终会调用我正在为其编写自定义匹配器的方法。换句话说,“getMemberData()”最终调用了“getPersonWIthTreeInfo()”

@Test
public void testGetMemberData()
      throws Exception {

    Gid memberGid = new Gid("1:2");
    Gid clusterGid = new Gid("3:4");
    boolean retBlob = true;

    Pm3CacheDataProviderMetricsTestImpl metrics = new Pm3CacheDataProviderMetricsTestImpl();
    PmCacheProvider pmCacheProvider = mock(PmCacheProvider.class);

    when(pmCacheProvider.getPersonWithTreeInfo(any(), any(), any())).thenReturn(new ClusterViewMember());

    Foo provider = new Foo(pmCacheProvider,metrics);
    ClusterViewMember cvm = provider.getMemberData(clusterGid, memberGid, retBlob);

    AssertJUnit.assertNotNull(cvm);

    assertTrue(metrics.getRecordGetMemberData() > 0);
  }

【问题讨论】:

    标签: java unit-testing testing mockito


    【解决方案1】:

    问题在于方法的最后一个参数是boolean

    现在,AgumentMatchers.any() 非常适合前两个参数,因为它们是对象。

    它不适合原始类型。

    尝试使用anyBoolean() 并为前两个参数添加特定的类预期:

    when(pmCacheProvider.getPersonWithTreeInfo(any(Gid.class), any(Gid.class), anyBoolean()))
    

    【讨论】:

    • 或者你也可以使用any(Boolean.class)作为最后一个。
    • 谢谢!就是这样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-20
    • 2021-09-24
    相关资源
    最近更新 更多