QueryDSL을 하고 강의를 들으면서 과제를 하다가 잠도 설치다보니 TIL이 그동안 소홀했습니다.
QueryDSL은 튜터님이나 같은 팀원끼리도 의견이 많이 갈리기도 하고 질문도 많은.. 되게 시끌벅적한 주제였습니다.
QueryDSL로 구현을 끝마치고 이제 테스트 코드를 작성하고 있었습니다.
자신이 좋아요 한 댓글을 페이징해서 가져오는 쿼리문에 대한 테스트였습니다.
@Test
void findLikedCommentsByUserId_ShouldReturnPagedLikedComments() {
//Given
User postOwner = new User(null, "testUser", "password", "Post User", "hi", "test@example.com", UserRole.USER);
em.persist(postOwner);
User likeOwner = new User(null, "testUser2", "password", "Like User", "hi", "test@example.com", UserRole.USER);
em.persist(likeOwner);
List<User> users = new ArrayList<>(); // 댓글 작성자들
for (int i = 0; i < 5; i++) {
User user = new User(null, "user" + i, "password", "User " + i, "hi!", "user" + i + "@example.com",
UserRole.USER);
em.persist(user);
users.add(user);
}
Post post = Post.builder().title("title test").content("content test").build();
post.setUser(postOwner);
em.persist(post);
for (int i = 0; i < 5; i++) {
Comment comment = Comment.builder().content("content " + i).user(users.get(i)).post(post).build();
em.persist(comment);
CommentLike commentLike = CommentLike.builder().comment(comment).user(likeOwner).build();
em.persist(commentLike);
}
em.flush();
em.clear();
Pageable pageable = PageRequest.of(0, 3, Sort.by(Sort.Direction.DESC, "createdAt"));
// When
Page<CommentResponseDto> result = commentRepositoryCustom.findLikedCommentsByUserId(likeOwner.getId(), pageable);
//Then
assertEquals(3, result.getContent().size());
assertEquals(5, result.getTotalElements());
assertEquals(2, result.getTotalPages());
}
글쓴 사람, 좋아요 누르는 사람, 댓글 작성자를 등록시킨 뒤 post도 만든 후 해당 포스트와 댓글 작성자를 연결하여 댓글 5개를 생성합니다. 해당 댓글에 다 좋아요를 눌렀고 의도한 바에 따르면 테스트 결과는 댓글 3개와 총 개수 5개 페이지 개수는 2개로 나와야 정상 통과되도록 했습니다.
하지만 테스트가 통과되지않았고 뭐가 문제인가 고민하다가 그냥 쿼리 자체가 이상한가 싶어서 봤는데 comment 자체에 좀 문제가 많았던 것같습니다. 코드 연결 방식이 좀 많이 실수를 일으킬 만한 코드였어서 수정을 같이 진행했습니다.
테스트 코드를 작성하면서 와닿는 부분이 많이 없었는데 이번을 계기로 크게 와닿았던 것같습니다.