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

 

 

'SpringFramework > JUnit Test' 카테고리의 다른 글

JUnit5 assertAll 사용법  (0) 2020.11.24
SpringBoot JUnit5 의존성 설정  (0) 2020.11.24
테스트 코드 작성  (0) 2020.06.10
Assert 함수  (0) 2020.06.10
관련 어노테이션  (0) 2020.06.10