Search code examples
springjunitspring-securitymockito

"Cannot resolve method" with mockito


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?


Solution

  • 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