Answers:
有一种类型安全的方法:使用ArgumentMatchers.any()
并使用以下类型进行限定:
ArgumentMatchers.<AsyncCallback<ResponseX>>any()
(Matchers.<AsyncCallback<ResponseX>>any()
Matchers
实际上已被弃用,但ArgumentMatchers
确实可行。
使用Java 8,any()
由于增强了类型推断功能,因此您可以简单地使用(假定静态导入)不带参数或类型参数。现在,编译器从目标类型(方法参数的类型)知道您的实际意思Matchers.<AsyncCallback<ResponseX>>any()
,这是Java 8之前的解决方案。
any()
匹配AsyncCallback<AnyOtherType>
吗?
AsyncCallback<AnyOtherType>
如果参数类型为“ AsyncCallback <ResponseX>”,则@MatthewRead Using 甚至不应编译。
when(x.y(any())).thenAnswer(...)
例如,当y
是public <T> T y(AsyncCallback<T> arg)
。如果需要的话,也许最好检查一下答案的类型?
isA()
。如果该对象包含Class
与该类型相对应的对象,并且接口公开了该对象,那么我想您可以在自定义匹配器中对其进行检查。或者例如,在a的情况下,Collection
您可以检查元素的类型。
Matchers
ArgumentMatchers
在Mockito v2中被替换-bheussler
将pierrefevrier注释发布为答案,如果它出现在答案中而不是注释中,则可能会很有用。
使用新版本的Mockito: (Matchers.<AsyncCallback<ResponseX>>any()
您可以进行强制转换,并在需要时添加抑制警告:
@SuppressWarnings("unchecked")
AsyncCallback<ResponseX> callback = Mockito.any(AsyncCallback.class)
如果Java允许使用“泛型”泛型,那么他们可以使用类似您所寻找的方法
private static <T, E> T<E> mock(Class<T<E>> clazz)
You cannot use argument matchers outside of verification or stubbing.
@SuppressWarnings
:java 8之前的版本,如果要将其分配给一个单独的变量,则可以使用any()
intoy的答案中的as。现在使用Java 8,any()
可以内联使用,而无需单独分配。