카테고리 없음

[내일배움캠프] 2월 24일 금요일 TIL 회고록

tft4rollz 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을 사용해서 구현해보려고 한다. 테스트 코드도 .. 작성해보고.. 다음주도 힘내야겠다.