- Authorization 헤더에 테스트용 토큰 추가하여 사용하기
- mocking하기
WithMockCustomUser 어노테이션 정의
@Retention(RetentionPolicy.RUNTIME) @WithSecurityContext(factory = WithMockCustomUserSecurityContextFactory.class) public @interface WithMockCustomUser { String email() default "guest@gmail.com"; String password() default "guestPassword12"; String nickname() default "guest"; }
WithMockCustomUserSecurityContextFactory 클래스 추가
public class WithMockCustomUserSecurityContextFactory implements WithSecurityContextFactory<WithMockCustomUser> { @Override public SecurityContext createSecurityContext(WithMockCustomUser annotation) { final SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); final User securityUser = User.builder() .nickname(annotation.nickname()) .email(annotation.email()) .password(annotation.password()) .build(); final JwtAuthenticationToken authenticationToken = new JwtAuthenticationToken(new JwtAuthentication("token", annotation.email()), null, Arrays.asList(new SimpleGrantedAuthority("ROLE_USER"))); authenticationToken.setDetails(securityUser); securityContext.setAuthentication(authenticationToken); return securityContext; } }
(+ JwtAuthenticationToken 생성자 default → public)
사용 예시
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK) @AutoConfigureMockMvc class UserMockControllerTest { @Mock private UserService userService; @InjectMocks private UserRestController userRestController; private MockMvc mockMvc; @BeforeEach void setup() { MockitoAnnotations.initMocks(this); mockMvc = MockMvcBuilders.standaloneSetup(userRestController) .setControllerAdvice(ApiExceptionHandler.class) .alwaysDo(print()) .build(); } @Test @WithMockCustomUser @DisplayName("개인정보 열람 테스트") void getUserInformationTest() throws Exception { mockMvc.perform(get("/api/v0/user")) .andExpect(status().isOk()) .andDo(print()); }
- @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK) 추가 필요
- 테스트 메소드에 @WithMockCustomUser 어노테이션 추가하여 사용, 인자로 email, password, nickname 전달하여 설정 가능(디폴트 값 있으므로 그대로 사용해도 ㄱㅊ)