与varargs()匹配会产生编译错误

时间:2013-11-05 17:52:05

标签: java mockito

我正在尝试模拟一个具有接受可变数量参数的方法的类。以下是示例代码 -

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

1 个答案:

答案 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 ShorcutsDZone's Effective Eclipse Shortcuts)的地方,所以你应该尝试修补你的“工具”。