-
Notifications
You must be signed in to change notification settings - Fork 1
TestSecurityConfig 사용 가이드
choi-ys edited this page May 20, 2024
·
7 revisions
@Import(SecurityConfig.class) // SecurityConfig에 작성된 기본 인증/인가 정책을 따름
public class TestSecurityConfig {
@MockBean
private InMemoryUserDetailsManager inMemoryUserDetailsManager; // InMomory 환경에서 Mocking된 인증된 사용자 정보 제공을 위한 UserDetailsService 구현체
@BeforeTestMethod
public void securitySetUp() {
given(inMemoryUserDetailsManager.loadUserByUsername(anyString()))
.willReturn(testLoginUser()); // SecurityContextHolder에 porkoTestMemberId 이름을 가지는 UserDetails 객체 저장
}
private LoginUser testLoginUser() {
return LoginUser.of(1L, "porkoTestMemberId"); // 인증된 사용자 Mock 객체
}
}
- 인증된 사용자 정보를 필요로 하는 Test Class 아래 설정 적용
- Class : @Import(TestSecurityConfig.class)
- Method: @WithUserDetails(value = "porkoTestMemberId", setupBefore = TestExecutionEvent.TEST_EXECUTION)
@DisplayName("Controller:Member")
@Import(TestSecurityConfig.class) // 인증된 사용자 Mock 적용을 위한 TestSecurityConfig 설정 적용
class MemberControllerTest extends MemberControllerTestHelper {
@Test
@WithUserDetails(value = "porkoTestMemberId", setupBefore = TestExecutionEvent.TEST_EXECUTION) // SecurityContextHolder에 저장된 porkoTestMemberId의 이름을 가지는 인증된 사용자 Mock 적용
@DisplayName("me")
void me() throws Exception {
get().url("/member/me")
.expect()
.ok();
}
}
@RestController
@RequiredArgsConstructor
public class MemberController {
private final MemberService memberService;
@GetMapping("me")
ResponseEntity<?> me(@LoginMember Long id) { // SecurityContextHolder에 저장된 인증된 사용자 Mock Principal을 @LoginMember를 통해 주입
MemberResponse memberResponse = memberService.loadMemberById(id);
return ResponseEntity.ok(memberResponse);
}
}