2

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

class MyClass{
    public List<String> getMulti(String... keys){//}
}
MyClass mc = mock(MyClass.class);
when(mc.getmValues(anyVararg())).thenReturn(someList);

但是请注意,使用此代码会出现编译错误 - MyClass 类型中的方法 getMulti(String...) 不适用于参数(对象)。有人可以帮我解决这个问题吗?

此外,在尝试 anyVararg() 之前,我使用了以下方法但是,匹配器不起作用并且方法 getmValues 没有返回“someList”(它返回一个空列表)。

when(mc.getmValues(any(String[].class))).thenReturn(someList);

并且该方法是使用 String[] 调用的。

也希望对此提供帮助(至于我可能做错了什么)。

谢谢尼莱什

4

1 回答 1

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 的 Effective Eclipse Shortcuts),所以你应该尝试修改你的“工具”。

于 2013-11-05T18:09:59.780 回答