使用mockito对依赖泛型参数的方法进行存根

时间:2013-04-11 15:01:05

标签: java mockito

我试图使用dependend泛型参数来存根方法,如下所示:

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

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

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

它不起作用,但给了我一个无限的泛型错误。 (我知道这不是磕磕绊绊,但这样的例子更容易,它归结为我想的那样。)

如果有人能提供帮助,我们将不胜感激。

1 个答案:

答案 0 :(得分:3)

这里的错误是any()返回一个Object类型,对类型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) { }
}