使用Mockito的通用“any()”方法
我有一个接口,需要一个Foo数组的方法: 
 public interface IBar { void doStuff(Foo[] arr); } 
 我正在嘲笑这个接口使用Mockito,我想断言doStuff()被调用,但我不想validation什么parameter passing – “不关心”。 
 如何使用any() ,generics方法而不是anyObject()来编写以下代码? 
 IBar bar = mock(IBar.class); ... verify(bar).doStuff((Foo[]) anyObject()); 
	
 从Java 8开始,您可以使用无参数的any方法,并且编译器会推断出types参数: 
 verify(bar).doStuff(any()); 
说明
Java 8中的新事物是,将使用expression式的目标types来推断其子expression式的types参数。 在Java 8之前,只有用于types参数推断(大部分时间)的方法的参数。
 在这种情况下, doStuff的参数types将是any()的目标types, any()的返回值types将被select为匹配该参数types。 
原始types
这不适用于原始types,不幸的是:
 public interface IBar { void doPrimitiveStuff(int i); } verify(bar).doPrimitiveStuff(any()); // Compiles but throws NullPointerException verify(bar).doPrimitiveStuff(anyInt()); // This is what you have to do instead 
 问题是编译器会推断Integer作为any()的返回值。  Mockito不会意识到这一点(由于types擦除)并返回默认值为null引用types。 运行时将尝试通过调用intValue方法来解除返回值,并抛出exception。 
这应该工作
 import static org.mockito.Matchers.any; import static org.mockito.Mockito.verify; verify(bar).DoStuff(any(Foo[].class)); 
 你可以使用Mockito.isA()来做到这一点: 
 import static org.mockito.Matchers.isA; import static org.mockito.Mockito.verify; verify(bar).doStuff(isA(Foo[].class)); 
http://site.mockito.org/mockito/docs/current/org/mockito/Matchers.html#isA(java.lang.Class);
 因为我需要为最新的项目(我们从1.10.19更新过)使用这个特性,为了让用户(已经使用mockito-core 2.1.0或更高版本 )保持最新,静态来自上述答案的方法应该从ArgumentMatchers类中取得: 
 import static org.mockito.ArgumentMatchers.isA; import static org.mockito.ArgumentMatchers.any; 
请记住这一点,如果你打算保持你的mockito文物最新的版本3,可能会从这个类可能不再存在:
根据2.1.0及以上版本,org.mockito.Matchers的javadoc指出:
使用
org.mockito.ArgumentMatchers。 这个类现在已经被弃用,以避免与Hamcrest *org.hamcrest.Matchers类的名字冲突。 这个类可能会在3.0版中被删除。