
@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 쿼리 흐름
-> 앞서 작성한 테스트코드의 given -> when -> then 로직이 모두 정상 수행되었음을 확인할 수 있다.
해당 글은 다음 도서의 내용을 정리하고 참고한 글임을 밝힙니다.
신선영, ⌜스프링 부트 3 벡엔드 개발자 되기 - 자바 편⌟, 골든래빗(주), 2023, 384쪽