java Mockito:使用泛型参数验证

cmssoen2  于 2022-12-17  发布在  Java
关注(0)|答案(5)|浏览(169)

使用Mockito,我可以执行以下操作:

verify(someService).process(any(Person.class));

但是如果process使用Collection<Person>,我该怎么写呢?不知道如何正确地写它。只是得到语法错误...

eivgtgni

eivgtgni1#

试试看:

verify(someService).process(ArgumentMatchers.<Collection<Person>>any());

实际上,IntelliJ在我键入any()时自动建议了这个修复...不幸的是,在这种情况下不能使用静态导入。

3pmvbmvn

3pmvbmvn2#

试试看:

verify(someService).process(anyCollectionOf(Person.class));

自从版本1.8 Mockito引入

public static <T> Collection<T> anyCollectionOf(Class<T> clazz);
gpnt7bae

gpnt7bae3#

如果您使用一个所有者方法,您甚至可以使用静态导入:

private Collection<Person> anyPersonCollection() {
    return any();
}

然后您可以使用

verify(someService).process(anyPersonCollection());
shstlldc

shstlldc4#

作为可接受答案的替代方案,您可以尝试:

verify(someService).process(Mockito.<SomeGenericClass<Person>>any());

在这里我使用了org.mockito.Mockito而不是Matchers

3npbholx

3npbholx5#

由于类型删除,您无法表达它。即使您可以在代码中表达它,Mockito也没有机会在运行时检查它。

interface PersonCollection extends Collection<Person> { /* nothing */ }

并在整个代码中使用它。
编辑:我错了,Mockito有AnyCollectionOf(..)这是你想要的。

相关问题