Mockito:使用通用参数进行验证

时间:2011-05-30 11:34:29

标签: java generics parameters verification mockito

有了Mockito,我可以做以下事情:

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

但如果process取代Collection<Person>,我该怎么写呢?无法弄清楚如何正确地写它。刚收到语法错误......

4 个答案:

答案 0 :(得分:107)

尝试:

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

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

答案 1 :(得分:25)

尝试:

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

自版本1.8 Mockito介绍

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

答案 2 :(得分:1)

如果您使用自己的方法,甚至可以使用静态导入:

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

然后你可以使用

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

答案 3 :(得分:-1)

由于类型擦除,您无法表达此信息。即使您可以在代码中表达它,Mockito也没有机会在运行时检查它。你可以创建一个像

这样的界面
interface PersonCollection extends Collection<Person> { /* nothing */ }

而是在整个代码中使用它。

编辑:我错了,Mockito有anyCollectionOf(..)这就是你想要的。