使用Mockito,我可以做到以下:
verify(someService).process(any(Person.class));
但是如果process
接受一个Collection<Person>
,我该怎么写呢?无法找出正确的写法,一直得到语法错误...
使用Mockito,我可以做到以下:
verify(someService).process(any(Person.class));
但是如果process
接受一个Collection<Person>
,我该怎么写呢?无法找出正确的写法,一直得到语法错误...
尝试:
verify(someService).process(ArgumentMatchers.<Collection<Person>>any());
事实上,当我键入any()
时,IntelliJ自动建议了这个修复方法...不幸的是,你不能在这种情况下使用静态导入。
试一试:
verify(someService).process(anyCollectionOf(Person.class));
自版本1.8起,Mockito引入了
public static <T> Collection<T> anyCollectionOf(Class<T> clazz);
private Collection<Person> anyPersonCollection() {
return any();
}
verify(someService).process(anyPersonCollection());
作为接受答案的替代方案,您可以尝试:
verify(someService).process(Mockito.<SomeGenericClass<Person>>any());
我在使用org.mockito.Mockito
而不是Matchers
。
interface PersonCollection extends Collection<Person> { /* nothing */ }
请使用这种方式替代,并在您的代码中始终如一地使用它。
编辑:我错了,Mockito有anyCollectionOf(..),这就是您想要的。
any(new TypeLiteral<Collection<Person>>() {})
。当然不太美观,但它确实可以工作,因为所有类型信息都可以在运行时(通过反射或字节码库)获得。 - Rogério
Matchers
已经被弃用,现在应该使用ArgumentMatchers
。 - Ray