SpringFramework/JUnit Test
Spring Seurity 적용시 테스트 방안
lovineff
2020. 6. 10. 11:50
SecurityContextHolder를 통해서 인증정보를 설정
테스트 실행 전 인증 정보를 직접 입력하여 테스트 진행
@Before
public void setUp() {
SecurityContextHolder.getContext()
.setAuthentication(new UsernamePasswordAuthenticationToken("test1"
, "test1"
, Arrays.asList(new SimpleGrantedAuthority("ROLE_USER"))
));
}
WithMockUser 어노테이션 사용
별도의 UserDetailsService와 같은 스텁을 제공하지 않아도 간단하게 인증정보를 설정하기 위한 어노테이션
@Test
@WithMockUser(value="test1",roles="USER")
public void User_목록_조회() throws Exception {
mockMvc.perform(get("/user/api/list"))
.andExpect(status().isOk())
.andDo(print());
}
WithUserDetails 어노테이션 사용
UserDetailService를 Bean으로 등록 후 사용
// UserDetailService Bean 등록
@Bean
@Profile("test")
public UserDetailsService userDetailsService() {
return new UserDetailsService() {
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
return User
.withUsername(username)
.password("password")
.authorities(new SimpleGrantedAuthority("ROLE_USER"))
.build();
}
};
}
// 테스트 코드 작성
@Test
@WithUserDetails(value = "test1")
public void User_목록_조회_컨트롤러() throws Exception {
mockMvc.perform(get("/user/api/list"))
.andExpect(status().isOk())
.andDo(print());
}