我有一个接口,它需要一个数组 Foo
:
public interface IBar {
void doStuff(Foo[] arr);
}
我正在使用 Mockito 模拟这个接口,我想断言 doStuff()
被调用,但我不想验证传递了什么参数 - “不在乎”。
如何使用通用方法 any()
而不是 anyObject()
编写以下代码?
IBar bar = mock(IBar.class);
...
verify(bar).doStuff((Foo[]) anyObject());
原文由 ripper234 发布,翻译遵循 CC BY-SA 4.0 许可协议
从 Java 8 开始,您可以使用无参数
any
方法,编译器将推断类型参数:解释
Java 8 中的新功能是表达式的 目标类型 将用于推断其子表达式的类型参数。在 Java 8 之前,只有用于类型参数推断的方法的参数(大部分时间)。
在这种情况下,参数类型
doStuff
将成为any()
的目标类型,返回值类型any()
将被选择以匹配该参数类型。添加此机制主要是为了能够编译 lambda 表达式,但它总体上改进了类型推断。
原始类型
不幸的是,这不适用于原始类型:
问题是编译器会将 --- 推断为 ---
any()
Integer
的返回值类型。 Mockito 不会意识到这一点(由于类型擦除)并返回引用类型的默认值,即null
。运行时将尝试通过调用intValue
方法来解开空返回值,然后将其传递给doStuff
,并引发异常。