是否可以用泛型传递接口的类型?
的接口:
public interface AsyncCallback<T>
在我的测试方法中:
Mockito.any(AsyncCallback.class)
将<ResponseX>放在后面或用于.class没有工作。
<ResponseX>
.class
你可以强制转换它,如果你喜欢,添加抑制警告:
@SuppressWarnings("unchecked") AsyncCallback<ResponseX> callback = Mockito.any(AsyncCallback.class)
如果Java允许“泛型”泛型,他们可以有这样的方法,这就是你正在寻找的
private static <T, E> T<E> mock(Class<T<E>> clazz)
有一种类型安全的方法:使用ArgumentMatchers.any()并用类型限定它:
ArgumentMatchers.any()
ArgumentMatchers.<AsyncCallback<ResponseX>>any()
我不得不采用以下机制来考虑泛型:
import static org.mockito.Matchers.any; List<String> list = any(); when(callMyMethod.getResult(list)).thenReturn(myResultString);
希望这能帮助到一些人。
使用Java 8,你可以简单地使用any()(假设静态导入)而不带参数或类型参数,因为增强了类型推断。编译器现在从目标类型(方法参数的类型)知道你实际上指的是Matchers.<AsyncCallback<ResponseX>>any(),这是java 8之前的解决方案。
any()
Matchers.<AsyncCallback<ResponseX>>any()
在thSoft的回答中,对any()方法的限定调用意味着我可以删除限定,因为返回类型允许推理:
private HashMap<String, String> anyStringStringHashMap() { return Matchers.any(); }
把pierrefevrier的评论作为答案,如果它出现在答案中而不是评论中,可能会很有用。
使用Mockito: (Matchers.<AsyncCallback<ResponseX>>any()的新版本
(Matchers.<AsyncCallback<ResponseX>>any()
我在使用Spring Example时遇到了类似的问题:
Example
Mockito.when(repo.findAll(Mockito.<Example<SrvReqToSupplierComment>>any())) .thenReturn(Lists.emptyList());
这里,你必须使用限定,b/c findAll方法可以采用多种类型,如Sort和Iterable。当然,你也可以使用带有类型安全警告的Mockito.any(Example.class)。
Sort
Iterable
Mockito.any(Example.class)
使用限定泛型类型和无参数any()方法可以工作(即ArgumentMatchers.<AsyncCallback<ResponseX>>any()),但对于较长的泛型表达式可能会变得笨拙。另一种方法是在自己的泛型方法中放入无参数any()调用,使用特定的泛型类型作为返回类型:
private static <T> AsyncCallback<T> anyAsyncCallback() { return ArgumentMatchers.any() }
Mockito.verify(mockObject).performCallback(any(), anyAsyncCallback())