我正在尝试模拟一个具有接受可变数量参数的方法的类。以下是示例代码 -
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 []调用该方法。
也会感谢这方面的帮助(关于我可能做错了什么)。
谢谢 Neelesh
答案 0 :(得分:2)
如果你将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)的地方,所以你应该尝试修补你的“工具”。