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

JUnit中Mock Sheet时触发InvalidUseOfMatchersException异常求助

解决Mockito Mock泛型参数方法的异常问题

错误原因

你触发的org.mockito.exceptions.misusing.InvalidUseOfMatchersException,核心原因是匹配器类型与方法参数的泛型类型不兼容:原方法第二个参数是List<String>,直接使用Mockito.any()会导致Mockito无法正确推断泛型类型,进而触发匹配器使用异常。

正确Mock写法

以下几种写法都可以解决问题,按精度从高到低排序:

1. 指定泛型类型的匹配器(最精确)

when(readAndProcessPricingSchemeUtils.loadPricingSchemeDto(
        Mockito.any(Sheet.class),
        Mockito.anyListOf(String.class)
    )).thenReturn(pricingSchemesDTOList);

2. 指定参数的类类型

如果不需要严格匹配泛型,也可以直接指定List的类类型:

when(readAndProcessPricingSchemeUtils.loadPricingSchemeDto(
        Mockito.any(Sheet.class),
        Mockito.any(List.class)
    )).thenReturn(pricingSchemesDTOList);

3. 静态导入匹配器简化代码

先导入ArgumentMatchers的静态方法:

import static org.mockito.ArgumentMatchers.*;

然后简化Mock代码:

when(readAndProcessPricingSchemeUtils.loadPricingSchemeDto(any(Sheet.class), anyListOf(String.class)))
    .thenReturn(pricingSchemesDTOList);

额外注意事项

  • 确保readAndProcessPricingSchemeUtils是通过@Mock注解或Mockito.mock()方法创建的Mock实例,而非真实对象
  • 所有参数必须统一使用匹配器,不能混合使用匹配器和真实参数(比如不能一个参数用any(),另一个传真实的List<String>对象)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 10:44:59