💡 개요
오늘도 어김없이 내일 있을 시험을 준비중이다. (그렇기 때문에 간단하게 정리할께요..)
그 중에서 테스트 관련 자료를 봤는데 단위 테스트, 통합 테스트, 시스템 테스트를 보고 궁금증이 생겼다.
그것은 바로 “통합 테스트는 어떻게 하는 것 인가..!” 이다.
🛠️ 단위 테스트는 알겠어요..
단위 테스트(== 유닛 테스트)는 매우 간단하다.
각 기능(메서드)에 대한 테스트 코드를 작성하는 것이다.
다음은 게시글을 작성을 성공하는 메서드의 단위 테스트 예시 코드이다.
@Test
void 게시글_작성_성공() {
// given
PostService postService = new PostService();
String title = "테스트 제목";
String content = "테스트 내용";
// when
Post post = postService.createPost(title, content);
// then
assertThat.equals(title).isEqualTo(post.getTitle());
assertThat.equals(content).isEqualTo(post.getContent());
}
🛠️ 통합 테스트는 뭐죠..?
그럼 통합테스트는 뭘까..?
통합 테스트는 여러 계층이 실제로 연동되는지를 검증하는 테스트이다.
일단 내가 개발중인 프로젝트는 모놀리틱 구조이다.
서비스, 컨트롤러, 리포지토리 등 모든 계층이 하나의 애플리케이션 안에 묶여 있다.
예를 들어, 게시글 작성 기능일 경우 “Controller → Service → Repository → DB” 까지 전체 흐름이 목적에 맞게 잘 동작하는지 확인하는 것이 통합 테스트이다.
예시 코드는 다음과 같다. (고마워요 ChatGPT!)
@SpringBootTest
@AutoConfigureMockMvc
class PostIntegrationTest {
@Autowired
private MockMvc mockMvc;
@Autowired
private PostRepository postRepository;
@BeforeEach
void setUp() {
postRepository.deleteAll(); // 테스트 격리
}
@Test
void 게시글_작성_요청_성공() throws Exception {
// given
String title = "통합 테스트 제목";
String content = "통합 테스트 내용";
String json = """
{
"title": "%s",
"content": "%s"
}
""".formatted(title, content);
// when & then
mockMvc.perform(post("/posts")
.contentType(MediaType.APPLICATION_JSON)
.content(json))
.andExpect(status().isOk())
.andExpect(jsonPath("$.title").value(title))
.andExpect(jsonPath("$.content").value(content));
}
}
만약 MSA처럼 여러 서비스가 분산되어있는 구조라면 통합 테스트를 더 신경써서 작성해야 할 것 같다.
'개발 일기' 카테고리의 다른 글
[개발 일기] 2025.06.16 - Redis Bloom Filter (0) | 2025.06.16 |
---|---|
[개발 일기] 2025.06.15 - 가상 스레드 (1) | 2025.06.15 |
[개발 일기] 2025.06.13 - 도시락 먼저 데우기 (0) | 2025.06.13 |
[개발 일기] 2025.06.12 - IPv4 vs IPv6 (0) | 2025.06.12 |
[개발 일기] 2025.06.11 - CSMA/CA vs CSMA/CD (0) | 2025.06.11 |