java - org.mockito.exceptions.misusing.InvalidUseOfMatchersException' 异常

标签 java unit-testing testing mockito

我查看了 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()

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

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

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

2 注释:

  1. 执行没有超过“when”行 - 这是错误发生的地方。

  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);
  }

最佳答案

问题在于你的方法的最后一个参数是 boolean 类型。

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

它不适合原始类型。

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

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

关于java - org.mockito.exceptions.misusing.InvalidUseOfMatchersException' 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57513016/

相关文章:

java - 无型号类别的 retrofit 2

java - 如何使用 mockito spy 进行惰性评估?

javascript - 用于测试 React 应用程序的全局导入

java - 为什么 LocalDate、LocalTime 和 Stream 对象使用工厂方法 of() 而不是构造函数?

java - Cap'n Proto - 在 Java 中查找消息大小

unit-testing - 带有 IStringLocalizer 的 asp.net 核心测试 Controller

android - 让 Android 应用程序崩溃的最佳方法是什么?

javascript - 软件故障注入(inject)的真正用途是什么?

java - 是否有搜索所有子包的 AspectJ 切入点表达式?

unit-testing - 在 .NET Core 中的内存数据库与 Moqing 框架