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