I use org.springframework.security.core.Authentication which has a method:
Collection extends GrantedAuthority> getAuthorities();
I want to mock it as below:
when(authentication.getAuthorities()).thenReturn(grantedAuthorities);
with authorities collection:
Collection grantedAuthorities = Lists.newArrayList(
new SimpleGrantedAuthority(AuthoritiesConstants.USER));
And I am using org.springframework.security.core.authority.SimpleGrantedAuthority which extends GrantedAuthority
And Intellij gives me below compile error:
Cannot resolve method 'thenReturn(java.util.Collection)'
I use Mockito 2.15.0 and thenReturn() method from it is:
OngoingStubbing thenReturn(T value);
What is the problem?
解决方案
Try using the other syntax to return your collection with a wildcard matching generic:
doReturn(grantedAuthorities).when(authentication).getAuthorities();
This doReturn call isn't type-safe and results in a runtime check on type but for your purposes it will return the mocked list you want.
There are a lot of details using mockito and generics with wildcards. For more details:
http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeArguments.html#Wildcards