shinsunyoung / springboot-developer

📚 <스프링부트 3 백엔드 개발자 되기> 예제코드
230 stars 92 forks source link

[Chapter 06] 6-6 블로그 글 삭제 API 구현 테스트 코드 부분 질문 드립니다! #48

Closed SummerToday closed 9 months ago

SummerToday commented 9 months ago

안녕하세요! 일단 쓰신 글 너무 잘 보고 있고 도움 많이 되고 있습니다!! 다만 실습 진행 중 궁금증이 생겨 질문 드립니다!

6.6.4 테스트 코드 부분 Then 부분에서 해당 테이블에 남아있는 글이 있는지 확인하는 코드가 작성되어 있는데, 테스트 하고자 하는 API 코드가 블로그 글 전체를 삭제 하는 코드가 아닌 특정 ID에 해당하는 글을 삭제하는 코드이니 테스트 코드를 작성할 때에도 삭제한 ID에 해당하는 글이 테이블에 아직 남아있는지를 확인하는 방향으로 코드를 Then 부분에 작성해주면 더 적합한 코드가 되지 않을까라는 궁금증이 생겼습니다. 물론 테스트 코드에서는 데이터를 하나만 넣고 진행하기 때문에, 다음 코드처럼 작성에도 테스트에는 크게 상관은 없지만, 코드를 적다보니 의문이 생겨 이렇게 질문 드립니다! 아니면 제가 아직 모르는 따로 생각하시는 부분이 있으셔서 그렇게 작성하셨는지 궁금합니다! 제가 생각한 Then 부분의 코드는 assertThat(blogRepository.findById(savedArticle.getId())).isEmpty(); 입니다.

감사합니다!

@DisplayName("deleteArticle: 블로그 글 삭제에 성공한다.")
    @Test
    public void deleteArticle() throws Exception {
        // given
        final String url = "/api/articles/{id}";
        final String title = "title";
        final String content = "content";

        Article savedArticle = blogRepository.save(Article.builder()
                .title(title)
                .content(content)
                .build());

        // when
        mockMvc.perform(delete(url, savedArticle.getId()))
                .andExpect(status().isOk());

        // then
        List<Article> articles = blogRepository.findAll();

        assertThat(articles).isEmpty();
    } 
shinsunyoung commented 9 months ago

안녕하세요~! 말씀해주신대로 assertThat(blogRepository.findById(savedArticle.getId())).isEmpty(); 을 사용해도 문제가 없습니다.

물론 테스트 코드에서는 데이터를 하나만 넣고 진행하기 때문에, 다음 코드처럼 작성에도 테스트에는 크게 상관은 없지만, 코드를 적다보니 의문이 생겨 이렇게 질문 드립니다!

말씀주신 대로 테스트 코드에 데이터를 하나만 넣고 진행하기 때문에 이 흐름도 어색하지 않을 것 같다는 생각이 들어요. 제가 생각한 테스트 코드의 흐름은 아래와 같은데요.

  1. 데이터를 하나 넣는다
  2. 삭제 액션을 함으로써 데이터가 없어지게 된다.
  3. 테이블이 비어 있는지 확인한다.

물론 "특정 id를 가진 블로그 글 삭제에 성공한다."를 명확하게 검증하려면 제시해주신 대안인 assertThat(blogRepository.findById(savedArticle.getId())).isEmpty();를 then 절에 사용하면 테스트 코드를 조금 더 명시적으로 작성할 수 있습니다. 둘 다 틀린 테스트 코드는 아니기 때문에 더 옳다고 생각하는 방법대로 작성해주시면 될 것 같습니다. 👍👍

감사합니다.

SummerToday commented 9 months ago

알겠습니다~! 감사합니다!!