我试图用像这样的依赖泛型参数来存根一个方法:
<T extends Foo> void exampleMethod(Type<T> arg1, T arg2);
使用 Mockito。但是当我尝试这样做时
verify(mock).exampleMethod(isA(Type.class), any());
它不起作用,但给了我一个无限的泛型错误。(我知道这不是存根,但这样的例子更容易,它归结为我认为的同一件事。)
如果有人可以提供帮助,将不胜感激。
这里的错误是any()
返回一个类型 Object,它对 type 无效T
。泛型只负责警告。改用any(Foo.class)
:
public class MockTest {
public static void main(String[] args) {
MockTest sandbox = Mockito.mock(MockTest.class);
// gives a type safety warning suppressable with @SuppressWarnings
verify(sandbox).exampleMethod(isA(Class.class), any(Foo.class));
// gives an unchecked cast warning suppressable with @SuppressWarnings
verify(sandbox).exampleMethod((Class<Foo>) isA(Class.class), any(Foo.class));
// gives no warnings because the cast in the helper method below
verify(sandbox).exampleMethod(isAClassOf(Foo.class), any(Foo.class));
}
@SuppressWarnings("unchecked")
private static <T> Class<T> isAClassOf(Class<T> clazz) {
return isA(Class.class);
}
<T extends Foo> void exampleMethod(Class<T> arg1, T arg2) { }
}