[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