Mockito中如何验证重载的可变参数方法调用?
Mockito验证可变参数重载方法的解决方案
你遇到的问题是Mockito默认会优先匹配单参数重载方法,而ArgumentMatchers.<Record>any()会被解析为单个Record类型的匹配器,因此无法命中可变参数版本。针对Mockito 3.11.2,有以下几种可行的解决办法:
使用数组类型匹配器
可变参数在Java中本质是数组,直接指定匹配Record[]类型即可命中可变参数重载:verify(publisher).publish(ArgumentMatchers.any(Record[].class));使用
varargThat专用匹配器
Mockito提供了varargThat匹配器专门处理可变参数场景,你可以通过lambda自定义匹配逻辑(示例中只要是可变参数调用就匹配):verify(publisher).publish(ArgumentMatchers.varargThat(args -> true));如果需要更精准的验证,比如检查参数数量或内容,可以修改lambda中的逻辑,例如验证传入了2个Record:
verify(publisher).publish(ArgumentMatchers.varargThat(args -> args.length == 2));明确传入多个参数匹配器
如果你知道调用时传入的参数数量,直接传入对应数量的匹配器即可,Mockito会自动匹配可变参数版本:// 假设调用时传入了2个Record实例 verify(publisher).publish(any(Record.class), any(Record.class));
内容的提问来源于stack exchange,提问作者tarunkumar
相关产品推荐
相关产品推荐

