1️⃣ 테스트 코드란?
테스트 코드는 내가 작성한 기능이 정상적으로 동작하는지 자동으로 검증하는 코드
- 우리가 main() 메서드 돌리면서 직접 테스트하던 것을, 코드로 남겨두는 것
- 개발 중, 리팩토링 중, 배포 전까지 신뢰할 수 있는 안전장치
2️⃣ 테스트 코드를 작성하는 이유
- 변경이 두렵지 않다 – 리팩토링해도 실패 시 즉시 확인 가능
- 문서 역할 – 코드만 봐도 어떤 기능인지 테스트 이름으로 설명됨
- 협업과 유지보수 – 다른 사람이 기능을 확신할 수 있음
- CI/CD 자동화 – 코드 푸시할 때마다 자동 검증 가능
테스트 코드는 개발자의 자신감과 안정성을 지켜주는 도구
3️⃣ 테스트 코드의 종류
| 테스트 유형 | 설명 |
| 단위 테스트 (Unit Test) | 한 클래스, 메서드 단위 테스트. 빠르고 작음 |
| 통합 테스트 (Integration Test) | 여러 레이어가 실제로 연결된 테스트 |
| E2E 테스트 | 실제 사용자 흐름을 시뮬레이션 (프론트-백-DB 등) |
4️⃣ 어떻게 작성하는가?
단위 테스트 + Mockito 기반 Service 테스트
@SpringBootTest
@ExtendWith(MockitoExtension.class)
class PostServiceTest {
@InjectMocks
private PostService postService;
@Mock
private PostRepository postRepository;
@Test
void 게시글_저장_성공() {
// given
Post post = new Post("제목", "내용");
when(postRepository.save(any())).thenReturn(post);
// when
Post saved = postService.createPost("제목", "내용");
// then
assertEquals("제목", saved.getTitle());
}
}
5️⃣ 주요 어노테이션 설명
| 어노테이션 | 설명 |
| @ExtendWith(MockitoExtension.class) | Mockito와 JUnit5 연동 |
| @Mock | 가짜 객체 생성 |
| @InjectMocks | 테스트 대상에 mock 주입 |
| @Test | 테스트 메서드 표시 |
| @DisplayName | 테스트 이름을 보기 좋게 표시 |
| @BeforeEach | 매 테스트 실행 전 초기화 작업 수행 |
'SPRING' 카테고리의 다른 글
| [SPRING] 뉴스피드 인덱스 실전 테스트 (0) | 2025.04.13 |
|---|---|
| [SPRING] 뉴스피드 과제 인덱스 성능 실험 (1) | 2025.04.13 |
| [Spring] 인덱싱 (0) | 2025.04.09 |
| [Spring] N+1 (1) | 2025.04.09 |
| [SPRING] Spring Security + JWT 인증 예외 처리 흐름 (1) | 2025.04.01 |