我正在尝试模拟一个类,该类具有接受可变数量参数的方法。下面是示例代码-
class MyClass{
public List<String> getMulti(String... keys){//}
}
MyClass mc = mock(MyClass.class);
when(mc.getmValues(anyVararg())).thenReturn(someList);
但是请注意,使用此代码我收到编译错误 - MyClass 类型中的方法 getMulti(String...) 不适用于参数 (Object)。有人可以帮我解决这个问题吗?
另外,在尝试anyVararg()之前,我使用了以下方法但是,匹配器不起作用,并且方法getmValues没有返回“someList”(它返回一个空列表)。
when(mc.getmValues(any(String[].class))).thenReturn(someList);
并且该方法是使用 String[] 调用的。
也希望能在这方面得到帮助(至于我可能做错了什么)。
谢谢 尼勒什
最佳答案
如果您将 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(""));
}
编辑(这不适合下面的评论)
大多数人并不知道 IDE 具有许多很酷的功能,这些功能旨在让我们的生活更轻松。例如,Eclipse 中的 CTRL+1 和 IDEA 中的 ALT+ENTER 是“针对当前问题的建议”的快捷方式。因此,只需在编辑器中单击 anyVararg()
,使用快捷方式,您就会看到建议的修复列表,其中包括转换为 String[]。
还有更多这些来自( Productive Eclipse Shorcuts 或 DZone's Effective Eclipse Shortcuts ),所以你应该尝试修改你的“工具”。
关于java - 与 varargs() 匹配会出现编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19795499/