블로그 API(5): 블로그 글 전체 조회 테스트 코드 작성

도람·2025년 8월 1일
post-thumbnail

글 전체 조회 테스트 코드 작성

@SpringBootTest
@AutoConfigureMockMvc
class BlogApiControllerTest {

    @Autowired
    protected MockMvc mockMvc;

    @Autowired
    protected ObjectMapper objectMapper; // 직렬화, 역직렬화를 위한 클래스

    @Autowired
    private WebApplicationContext context;

    @Autowired
    BlogRepository blogRepository;

    @BeforeEach
    public void mockMvcSetUp(){
        this.mockMvc = MockMvcBuilders.webAppContextSetup(context)
                .build();
        blogRepository.deleteAll();
    }

    @DisplayName("findAllArticle: 블로그 글 목록 조회에 성공한다.")
    @Test
    public void findAllArticle() throws Exception{

        //given
        final String url = "/api/articles";
        final String title = "title";
        final String content = "content";

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

        //when
        final ResultActions resultActions = mockMvc.perform(get(url)
                        .accept(MediaType.APPLICATION_JSON));

        //then
        resultActions
                .andExpect(status().isOk())
                .andExpect(jsonPath("$[0].content").value(content))
                .andExpect(jsonPath("$[0].title").value(title));
    }
}
  • GIVEN : Article 엔티티를 생성하여 save()로 저장한다.

  • WHEN : API 요청을 실행한다.
    - mockMVC.perfor("/api/article")... 로 HTTP GET요청을 보낸다.

  • THEN : 반환된 JSON 배열의 첫번째 요소에 기대한 title과 conent가 있는지 검증한다.


테스트코드 흐름

   시작
     ↓
  @BeforeEach: 테스트 환경 초기화
     ↓
  Given: 테스트용 아티클 저장
     ↓
  When: /api/articles GET 요청
     ↓
  Then: 상태 코드 및 JSON 필드 검증
     ↓
   종료

테스트코드 실행


테스트코드 로그 분석

2025-08-01T20:13:42.310+09:00  INFO 7424 --- [    Test worker] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
2025-08-01T20:13:42.310+09:00  INFO 7424 --- [    Test worker] o.s.t.web.servlet.TestDispatcherServlet  : Initializing Servlet ''
2025-08-01T20:13:42.311+09:00  INFO 7424 --- [    Test worker] o.s.t.web.servlet.TestDispatcherServlet  : Completed initialization in 1 ms
Hibernate: 
    select
        a1_0.id,
        a1_0.content,
        a1_0.title 
    from
        article a1_0
Hibernate: 
    delete 
    from
        article 
    where
        id=?
Hibernate: 
    delete 
    from
        article 
    where
        id=?
Hibernate: 
    delete 
    from
        article 
    where
        id=?
Hibernate: 
    insert 
    into
        article
        (content, title, id) 
    values
        (?, ?, default)
Hibernate: 
    select
        a1_0.id,
        a1_0.content,
        a1_0.title 
    from
        article a1_0
  • Initializing Spring TestDispatcherServlet '' → Completed initialization in 1 ms: 서블릿이 문제없이 초기화되었다.

  • Hibernate 쿼리 흐름

    • delete from article where id=? : 기존 데이터 삭제
    • insert into article(...) values(...) : 테스트용 데이터 저장 완료
    • select ... from article : 조회로직이 실행.

    -> 앞서 작성한 테스트코드의 given -> when -> then 로직이 모두 정상 수행되었음을 확인할 수 있다.


해당 글은 다음 도서의 내용을 정리하고 참고한 글임을 밝힙니다.
신선영, ⌜스프링 부트 3 벡엔드 개발자 되기 - 자바 편⌟, 골든래빗(주), 2023, 384쪽

profile
정도를 걷는 엔지니어

0개의 댓글