Mockito.any() 匹配泛型类型 T 的任何实例

Joh*_*pit 3 java generics mockito

我试图模拟一个 void 方法来每次都抛出异常。该方法将 aList<SomeClass>作为参数。我如何将其传递给Mockito.any()

Mockito.doThrow(new Exception())
       .when(myClassInstanceSpy)
       .myVoidMethod(Mockito.any(List<SomeClass>.class)); // This fails!
Run Code Online (Sandbox Code Playgroud)

这是我的类定义:

class MyClass {
    ... 
    public void myVoidMethod(List<SomeClass> scList) {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

Jef*_*ica 7

您可以使用显式方法类型指定泛型:

Mockito.doThrow(new Exception())
   .when(myClassInstanceSpy)
   .myVoidMethod(Mockito.<List<SomeClass>>any());
Run Code Online (Sandbox Code Playgroud)

或者List特别是使用处理程序:

Mockito.doThrow(new Exception())
   .when(myClassInstanceSpy)
   .myVoidMethod(Mockito.anyListOf(SomeClass.class));
Run Code Online (Sandbox Code Playgroud)

Java 8 允许参数类型推断,因此如果您使用的是 Java 8,这也可能有效:

Mockito.doThrow(new Exception())
   .when(myClassInstanceSpy)
   .myVoidMethod(Mockito.any());
Run Code Online (Sandbox Code Playgroud)