Today, while writing unit test case for one of the Java method which looks like below:
public ApplicationUser getApplicationUser() {
ApplicationUser applicationUser = (ApplicationUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
return applicationUser;
}I want to mock Spring Security Context to get the Principal, to achieve the same I mocked each level of method calls as follows:
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.mock;
import org.mockito.MockitoAnnotations;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import com.arpit.security.user.ApplicationUser;
public class BaseTest {
@Before
public void setupMock() {
MockitoAnnotations.initMocks(this);
}
@Test
public void mockApplicationUser() {
ApplicationUser applicationUser = mock(ApplicationUser.class);
Authentication authentication = mock(Authentication.class);
SecurityContext securityContext = mock(SecurityContext.class);
when(securityContext.getAuthentication()).thenReturn(authentication);
SecurityContextHolder.setContext(securityContext);
when(SecurityContextHolder.getContext().getAuthentication().getPrincipal()).thenReturn(applicationUser);
}
}| Reference: | Mocking Spring Security Context for Unit Testing from our JCG partner Arpit Aggarwal at the Arpit Aggarwal blog. |
Do you want to know how to develop your skillset to become a Java Rockstar?
Subscribe to our newsletter to start Rocking right now!
To get you started we give you our best selling eBooks for FREE!
1. JPA Mini Book
2. JVM Troubleshooting Guide
3. JUnit Tutorial for Unit Testing
4. Java Annotations Tutorial
5. Java Interview Questions
6. Spring Interview Questions
7. Android UI Design
and many more ....
I agree to the Terms and Privacy Policy
Thank you!
We will contact you soon.
π Photo of Arpit Aggarwal
Arpit AggarwalMay 18th, 2017Last Updated: October 15th, 2018
Arpit AggarwalMay 18th, 2017Last Updated: October 15th, 2018
3 8,993 1 minute read

This site uses Akismet to reduce spam. Learn how your comment data is processed.
Thanks very much for that information, it save my today.
Nice to hear this Angel Luis Fernandez Benot, I appreciate if you share your feedback on the original post as well β https://aggarwalarpit.wordpress.com/2017/05/17/mocking-spring-security-context-for-unit-testing/
The last line of the test method, i.e.:
when(SecurityContextHolder.getContext().getAuthentication().getPrincipal()).thenReturn(applicationUser);can be replaced by:
when(authentication.getPrincipal()).thenReturn(applicationUser);