[TIL] Today I Lerned - 230102
2023. 1. 2. 21:22ㆍ기록/TIL
[TIL] Today I Lerned - 230102
230102 기록
프로젝트
프로젝트 시작
프로젝트의 주제 : 시큐리티를 사용한 페이지 API 만들기
다만 처음에는 시큐리티를 바로 적용하는 것이 아닌 JWT를 이용하여 인증하는 방식으로 학습 진행, 후에 시큐리티로 리팩토링 하기로 결정
- User : 회원가입, 로그인
- Board : 게시글 작성 / 수정 / 조회 / 삭제
- Comment : 댓글 작성 / 수정 / 조회 / 삭제
- LikeBoard : 게시글 좋아요
- LikeComment : 댓글 좋아요, 좋아요 취소
해당 프로젝트는 크게 위와 같은 기능이 존재, 이때 내가 맡은 부분은 LikeComment 부분이다.
맡게 된 기능의 구현은 빠르게 끝났지만 이번의 경우 각자 맡은 역할이 존재하기에 내가 만든 부분이 잘 돌아가는지 확인하기 위해 테스트 코드를 작성해야 하는 상황이 생겼다.
Test 코드
- Junit5를 사용
- Given / when / then 사용
- 어려웠던 점
- 테스트 코드라고 해당 코드의 내용을 직접 test파일에 기입하려고 했던 부분
- 처음 테스트 코드를 작성하려고 할 때 테스트 코드에 내가 테스트 하려는 기능을 적어줘야 한다고 생각했다.
- 튜터님에게 질문을 하면서 알게된 점
- 테스트 코드는 말그대로 테스트 코드. 내가 작성한 코드가 맡은 바 역할을 잘 돌아가게 하는지 파악
- 그러므로 clickFavorite이란 메서드를 test하고 싶다고 해당 메서드의 기능을 test 코드에 전체를 입력하는 것이 아닌 해당 메서드를 호출하여 사용
- 해당 메서드를 호출하려면 @InjectMock으로 sevice 코드를 가져와서 DI 시킨 후 호출
- 테스트 코드에서 실질적으로 중요한건 given의 부분
- 내가 원하는 부분을 넣어서 테스트를 작성해야 하기에 given에서 값을 올바르게 지정하는 것이 중요
- mock() - 테스트 하고자 하는 객체를 지정
- when() - 만약 해당 mock 객체를 호출할 때 원하는 값이 리턴될 수 있도록 지정
- 값을 제대로 넣은 후 작성한 메서드를 호출하고 값을 넣어주면서 메서드의 기능이 괜찮은지 확인
- 테스트하려는 부분이 스프링 내부에서의 객체(HttpServletRequest.. etc) 같은 부분을 참조하면 설계를 다시 해보기
- 테스트 코드를 작성할 때 어려움을 느낀 부분은 다음과 같다
- HttpServletRequest의 객체인 request를 인자로 가져왔었다.
- 그럼 해당 인자의 처리는 어떤 방식으로 진행이 되는가?
- 알게된 점
- 이러한 spring 내부에서 존재하는 객체가 test코드에서 구현하기는 어려움
- test코드로 들어오는 경우에는 사용자가 정의한 기능만 들어오도록 하는 것이 좋은 설계로 가는 부분이다
- 만약 test코드로 스프링 내부의 객체가 들어오게 된다면 다시한번 설계를 고려해보는 쪽도 하나의 방법이다
실제로 테스트 코드 작성 전에 해당 내용 정리. 작성 후 테스트 코드 업로드 예정
'기록 > TIL' 카테고리의 다른 글
[TIL] Today I Lerned - 230104 (0) | 2023.01.04 |
---|---|
[TIL] Today I Lerned - 230103 (0) | 2023.01.03 |
[TIL] Today I Lerned - 221230 (0) | 2022.12.30 |
[TIL] Today I Lerned - 221229 (0) | 2022.12.30 |
[TIL] Today I Lerned - 221228 (0) | 2022.12.28 |