Java 与varargs()匹配会导致编译错误

Java 与varargs()匹配会导致编译错误,java,mockito,Java,Mockito,我试图模拟一个类,它有一个接受可变数量参数的方法。下面是示例代码- class MyClass{ public List<String> getMulti(String... keys){//} } MyClass mc = mock(MyClass.class); when(mc.getmValues(anyVararg())).thenReturn(someList); 该方法是用字符串[]调用的 我也会很感激在这方面的帮助(至于我可能做错了什么) 多谢各位 Neele

我试图模拟一个类,它有一个接受可变数量参数的方法。下面是示例代码-

class MyClass{
    public List<String> getMulti(String... keys){//}
}
MyClass mc = mock(MyClass.class);
when(mc.getmValues(anyVararg())).thenReturn(someList);
该方法是用字符串[]调用的

我也会很感激在这方面的帮助(至于我可能做错了什么)

多谢各位
Neelesh

如果您将
anyVararg(
)强制转换为
String[]
,您应该没有问题:

@Test
public void myTest(){
    List<String> expectedList = new ArrayList<>();
    MyClass mc = mock(MyClass.class);
    when(mc.getMulti((String[]) anyVararg())).thenReturn(expectedList);
    assertSame(expectedList, mc.getMulti(""));
}
@测试
公共无效myTest(){
List expectedList=新建ArrayList();
MyClass mc=mock(MyClass.class);
当(mc.getMulti((String[])anyVararg())。然后返回(expectedList);
资产相同(expectedList,mc.getMulti(“”);
}
编辑(这不适合下面的评论)

大多数人并不知道IDE有很多很酷的特性,这些特性是为了让我们的生活更轻松。例如,Eclipse中的CTRL+1和IDEA中的ALT+ENTER是“关于当前问题的建议”的快捷方式。因此,只需在编辑器中单击
anyVararg()
,使用快捷方式,您将看到建议的修复列表,并将其转换为字符串[]


这些工具的来源(或)还有很多,因此您应该尝试修补您的“工具”。

您是否尝试过在anyVararg()上显式填充类型参数<代码>何时(mc.getmValues(Mockito.anyVararg())。然后返回(someList)非常感谢ton Grove和pobrelkey。我感到很痛苦!我一开始就应该想到这一点。再次感谢汉克斯·阿顿·格罗夫和波布雷尔基。我感到很痛苦!我一开始就应该想到这一点。再次感谢。没问题,你绝对不应该感到痛苦,因为我们都会犯愚蠢的错误,这是学习过程中正常的一部分。我假设你使用一个IDE,所以让我给你一个建议,它太长了,不适合这里,所以我把它添加到我的原始答案中:)这看起来是一个可靠的答案,OP-你愿意接受它吗(绿色记号)?Grove,你可能在问题出现之前就为我解决了更多的问题。非常感谢!非常欢迎您,如果有机会,请随时这样做。干杯
@Test
public void myTest(){
    List<String> expectedList = new ArrayList<>();
    MyClass mc = mock(MyClass.class);
    when(mc.getMulti((String[]) anyVararg())).thenReturn(expectedList);
    assertSame(expectedList, mc.getMulti(""));
}