You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Mockito模拟回调函数时出现Incompatible equality constraint错误如何解决

错误诱因

该错误由两个问题共同触发:

  • 泛型约束不匹配
    useCacheElseCompute的泛型T和第二个入参valueClass的类型绑定,本次业务调用中传入的valueClass是NotificationTemplateDTO.class,因此第三个参数Supplier<T>的实际泛型为Supplier<NotificationTemplateDTO>。但测试代码里手动指定的泛型为Supplier<NotificationTemplateRepository>,和实际需要的类型冲突,触发了泛型相等约束校验错误。
  • 方法参数匹配语法错误
    测试代码中第三个参数的匹配器后多闭合了一个括号,导致原本属于useCacheElseCompute第四个入参的any(Long.class)被放置在方法参数列表之外,Mockito无法匹配到对应方法签名。
修复方案

修正泛型参数与括号位置即可,修正后的测试代码如下:

@Test
void testGetNotificationMessage() {
  Mockito.when(mockCacheService.useCacheElseCompute(
    templateCacheKey,
    NotificationTemplateDTO.class,
    ArgumentMatchers.<Supplier<NotificationTemplateDTO>>any(),
    ArgumentMatchers.any(Long.class)
  )).thenReturn(null);
}

如果不需要显式指定泛型,也可以直接简化写法,Mockito会自动推导泛型:

@Test
void testGetNotificationMessage() {
  Mockito.when(mockCacheService.useCacheElseCompute(
    templateCacheKey,
    NotificationTemplateDTO.class,
    ArgumentMatchers.any(),
    ArgumentMatchers.any(Long.class)
  )).thenReturn(null);
}

内容的提问来源于stack exchange,提问作者Arvind Choudhary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 20:18:02