3

我试图用像这样的依赖泛型参数来存根一个方法:

<T extends Foo> void exampleMethod(Type<T> arg1, T arg2);

使用 Mockito。但是当我尝试这样做时

verify(mock).exampleMethod(isA(Type.class), any());

它不起作用,但给了我一个无限的泛型错误。(我知道这不是存根,但这样的例子更容易,它归结为我认为的同一件事。)

如果有人可以提供帮助,将不胜感激。

4

1 回答 1

3

这里的错误是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) { }
}
于 2013-04-13T18:55:06.907 回答