ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [내일배움캠프] 2월 24일 금요일 TIL 회고록
    카테고리 없음 2023. 2. 24. 22:50

    며칠동안 댓글 수정 테스트 코드를 성공시키려고 노력하다가 도저히 답이 안나와 오늘 튜터님한테 가서 도움을 요청했다.

     

    댓글을 수정할때 댓글을 작성한 유저와 수정한 유저가 같은지 체크하는 메서드가 있는데 이 메서드가 좀 복잡해서..

     

    작성한 유저와 수정하려 하는 유저가 같은지 확인하는 메서드이다.

    if문을 사용해 getNicknameByComment(comment)랑 user.getNickname이 같지 않으면 익셉션을 출력하는 기능인데

    여기서 getNicknameByComment 메서드를 보면

    @Override
    public void checkUser(User user, Comment comment) {
      if (!getNicknameByComment(comment).equals(user.getNickname())) {
        throw new CustomException(ExceptionStatus.COMMENT_USER_NOT_MATCH);
      }

    닉네임을 가져오는 기능이고, userService에서 getProfile 메서드를 사용해서 댓글의 유저아이디에 대한 유저 닉네임을 가져오는 기능이다. 이쪽에서 테스트 코드 오류가 자꾸 나서 멘붕이 왔었다.

    // 닉네임을 가져오는 기능
    // 유저서비스에서 댓글아이디에 프로필을 조회해서 닉네임을 가져오는 기능
    @Override
    public String getNicknameByComment(Comment comment) {
      return userService.getProfile(comment.getUserId()).getNickname();
    }

    댓글 수정 테스트 코드이다.

    튜터님이랑 같이 보면서 여기까지 진행했는데.. 아직 테스트 성공하지는 못했다.

    @Test
    @DisplayName("질문 댓글 수정")
    void updateQuestionComment() {
      // given
      CommentRequest commentRequest = CommentRequest.builder()
          .content("댓글수정")
          .build();
      User user = new User("user2", passwordEncoder.encode("pass12!@"),
          "nickname2", "aa@b.com");
      ProfileImage profileImage = new ProfileImage("13", user.getId());
      ProfileResponse profileResponse = ProfileResponse.builder()
          .nickname("user2")
          .build();
      Long questionBoardId = 1L;
      Comment comment = new Comment(user, commentRequest, questionBoardId);
      when(commentRepository.findById(anyLong())).thenReturn(Optional.of(comment));
      when(userRepository.findById(anyLong())).thenReturn(Optional.of(user));
      when(profileImageRepository.findByUserId(anyLong())).thenReturn(Optional.of(profileImage));
      when(userService.getProfile(anyLong())).thenReturn(profileResponse);
    
      // when
      commentService.updateQuestionComment(comment, commentRequest, user);
    
      // then
      verify(commentRepository, times(1)).save(any(Comment.class));
    }

    위에 코드를 실행하면 이 오류가 나온다. 여기까지 하고 오후에 발표라서 나중에 다시 하기로 했다.

    월요일날 다시 가서 물어봐야되겠다.

    테스트 코드를 작성하면서 느낀 점이 TDD가 필요할 것 같다는 점 (다 작성한 후에 작성하면 생각해야 할 것이 너무너무너무 많다.)

    코드를 짤 때 테스트 코드를 작성하기 쉽게 코딩을 하자 라는 점을 많이 많이 느꼈다..

    이 후에 최종 프로젝트 중간 발표, MVP 중간 발표 회고록을 작성했다.

     

    중간 발표 후 회고에 이렇게 적었다.

    대댓글을 구현하려 했을때 구글링을 해봤는데 전부 Querydsl을 사용해서 구현을 해서 나도 한번 공부를 해보고 대댓글을 Querydsl을 사용해서 구현해보려고 한다. 테스트 코드도 .. 작성해보고.. 다음주도 힘내야겠다.

Designed by Tistory.