[SpringBoot] 테스트 환경 구축 - MockUser

2024. 4. 9. 11:41Spring

설명

해당 글은 https://hunstory.tistory.com/81 에 이어서 작성된 글입니다.
테스트 동작시 User 모킹설정에 대한 글입니다.

 

 

구성

1. SecurityContextFactory에서 사용할 MockUser 구성

@Retention(RetentionPolicy.RUNTIME)
@WithSecurityContext(factory = WithMockCustomUserSecurityContextFactory.class)
public @interface WithCustomMockUser {
    long id() default 1L;
    String name() default "이상훈";
    String email() default "";
    String[] roles() default {"NORMAL"};
}

2. 커스텀 설정을 위한 커스텀 SecurityContextFactory 구성

public class WithMockCustomUserSecurityContextFactory implements WithSecurityContextFactory<WithCustomMockUser> {
    @Override
    public SecurityContext createSecurityContext(WithCustomMockUser mockUser) {
        String name = StringUtils.hasLength(mockUser.name()) ? mockUser.name() : "name";
        SecurityContext contxt = SecurityContextHolder.createEmptyContext();

		# 해당 부분은 인증 구성에 맞게 구성
        UserInfo userInfo = UserInfo.builder()
                .tokenData(TokenCheckResult.builder()
                        .accessToken("accessToken")
                        .accessToken("accessToken")
                        .build())
                .accountInfo(AccountInfo.builder()
                        .id(mockUser.id())
                        .name(name)
                        .email(mockUser.email())
                        .roles(Arrays.asList(mockUser.roles()))
                        .build())
                .build();

        Authentication jwtAuthenticationToken =
                new JwtAuthenticationToken(studentUserDetail, "", userInfo.getAuthorities());
        contxt.setAuthentication(jwtAuthenticationToken);

        return contxt;
    }
}

 

3. 테스트코드 작성 시 


@Test
@WithCustomMockUser(id=1L)
@DisplayName("전과목 학습 문제집 보기")
void findExamPaper() throws Exception {
    // MockUser Controller 테스트