java - org.mockito.exceptions.misusing.InvalidUseOfMatchersException' 异常
问题描述
我查看了有关 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 注释:
执行不会超过“何时”行 - 那是发生错误的地方。
我正在调用的 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()
并为前两个参数添加特定的类预期:
when(pmCacheProvider.getPersonWithTreeInfo(any(Gid.class), any(Gid.class), anyBoolean()))
推荐阅读
- sql - 根据多个条件为列赋值
- unit-testing - 在 Quarkus 中执行端点单元测试的最佳方法是什么?
- java - 无法从 Spring Boot 连接到 postgresql 模式 - 'org.postgresql.util.PLSQLException:错误:模式“测试”不存在'
- curve-fitting - 在点的同一侧拟合曲线
- python - 通过参数化查询使用 python 插入 MySQL 会导致错误
- java - 无法让 Android Studio 连接到 MySQL 数据库
- flutter - flutter:录制与动画 webp 时长相同的视频
- regex - 为什么我的 Ruby RegExp 不能正常工作?
- arrays - 如果所有值都是正数并且数字 <= k,我可以在 O(n) 中对数组进行排序吗?
- r - R:如何重新排列列中的冗余值,以便行少列多