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<SimpleGrantedAuthority> 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<org.spring.security.core.authority.SimpleGrantedAuthority>)'
I use Mockito 2.15.0
and thenReturn()
method from it is:
OngoingStubbing<T> 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
If you want to ensure type safety you can initialize your collection as
Collection grantedAuthorities =
Lists.newArrayList(
new SimpleGrantedAuthority(AuthoritiesConstants.USER));
Then you can normally use when(authentication.getAuthorities()).thenReturn(grantedAuthorities);
The advantage with this solution is that grantedAuthorities
's type is preserved.
For more details check this article.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With