VOOZH about

URL: https://www.javacodegeeks.com/2017/05/mocking-spring-security-context-unit-testing.html

⇱ Mocking Spring Security Context for Unit Testing - Java Code Geeks


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 Aggarwal
May 18th, 2017Last Updated: October 15th, 2018
3 8,993 1 minute read

Arpit Aggarwal

Arpit is a Consultant at Xebia India. He has been designing and building J2EE applications since more than 6 years. He is fond of Object Oriented and lover of Functional programming. You can read more of his writings at aggarwalarpit.wordpress.com
Subscribe

This site uses Akismet to reduce spam. Learn how your comment data is processed.

3 Comments
Oldest
Newest Most Voted
Angel Luis Fernandez Benot
9 years ago

Thanks very much for that information, it save my today.

0
Reply
9 years ago

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/

0
Reply
Ajoy Bhatia
7 years ago

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);

6
Reply
Back to top button
Close
wpDiscuz