쌓고 쌓다
컨트롤러 테스트 코드 @AuthenticationPrincipal 인증 방법 본문
컨트롤러에 @AuthenticationPrincipal이 있어 테스트 코드를 동작할때 인증이 필요한 상황이 발생했다.
그래서 SecurityContextHolder에 우리의 사용자 정보를 등록할 필요가 있다.
UserDetails Mock 객체를 Authentication에 등록할 필요가 있다.
등록하면 @AuthenticationPrincipal에서 사용자 정보를 꺼내 쓴다.
CommentControllerTest
@WebMvcTest(value = {CommentController.class})
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class CommentControllerTest {
@Autowired
private WebApplicationContext webApplicationContext;
private MockMvc mockMvc;
@MockBean
private CommentService commentService;
@MockBean
private PosterService posterService;
private Member member;
private PrincipalDetails principalDetails;
@BeforeAll
public void beforeAll() {
this.mockMvc = MockMvcBuilders
.webAppContextSetup(webApplicationContext)
.addFilter(new CharacterEncodingFilter("utf-8", true))
.build();
SecurityContext context = SecurityContextHolder.getContext();
member = mock(Member.class);
principalDetails = mock(PrincipalDetails.class);
when(member.getId())
.thenReturn(1L);
when(member.getName())
.thenReturn("name");
when(principalDetails.getMember())
.thenReturn(member);
Authentication authentication = new UsernamePasswordAuthenticationToken(principalDetails, null, principalDetails.getAuthorities());
context.setAuthentication(authentication);
}
}
'프로그래밍 > spring' 카테고리의 다른 글
QueryDSL로 검색과 페이징 API 요청 처리하기 (0) | 2024.02.13 |
---|---|
좋아요순 같은 복잡한 정렬 기능 추가하기 QueryDSL (1) | 2024.02.09 |
LocalDateTime 또는 Enum 타입 jsonPath value 검증 주의사항 (0) | 2024.02.02 |
Controller 테스트시 401, 403 에러 발생 (WebMvcTest에 SecurityConfig 설정하는법) (1) | 2024.01.31 |
Mockito given willReturn이 동작하지 않을때 (0) | 2024.01.30 |
Comments