java - 与 varargs() 匹配会出现编译错误

标签 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[] 调用的。

也希望能在这方面得到帮助(至于我可能做错了什么)。

谢谢 尼勒什

最佳答案

如果您将 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 ),所以你应该尝试修改你的“工具”。

关于java - 与 varargs() 匹配会出现编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19795499/

相关文章:

Java 到 XML 的转换?

java - JBoss/WildFly 连接池和关闭连接

java - 如何模拟 javax.servlet.ServletInputStream

java - 构造函数中模拟 bean 的 NullPointerException - 如何通过首先自定义构造函数来正确模拟模拟 Bean?

java - 在Android中正确测试静态方法

Java 遵循的路径

java.net.SocketException : sendto failed: EPIPE (Broken pipe) on Android 异常

java - R.array是一个类但不是一个对象?

java - 用于 JUnit 测试的模拟对象

android - 如何使用 Mockito 或 MockK 模拟 android.util.Patterns