开发者

Mockito: Verifying with generic parameters

开发者 https://www.devze.com 2023-03-09 10:32 出处:网络
With Mockito I can do the following: verify(someService).process(any(Person.class)); But how do开发者_C百科 I write this if process takes a Collection<Person> instead? Can\'t figure out how t

With Mockito I can do the following:

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

But how do开发者_C百科 I write this if process takes a Collection<Person> instead? Can't figure out how to write it correctly. Just getting syntax errors...


Try:

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

Actually, IntelliJ automatically suggested this fix when I typed any()... Unfortunately you cannot use static import in this case.


Try :

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

Since version 1.8 Mockito introduces

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


if you use a own method, you can even use static import:

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

Then you can use

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


As an alternative to the accepted answer you can try:

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

Where I used org.mockito.Mockito instead of Matchers.


You can't express this because of type erasure. Even if you could express it in code, Mockito had no chance to check it at runtime. You could create an interface like

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

instead and use this throughout your code.

Edit: I was wrong, Mockito has anyCollectionOf(..) which is what you want.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号