1. 테스트 코드란?
- 개발한 코드가 요구사항에 명시한 대로 동작하는지 검증하는 코드
- 테스트 자동화로 회귀 오류를 방지하고 안정적인 리팩토링을 지원!
2. 테스트 코드의 작성 이유
- 기능 요구사항의 검증
- 코드 변경 이후 기능 보호
- 문서화 효과 및 설계 개선
"테스트 코드 작성에 무한정 리소스를 투입할 순 없다."
(테스크 커버리지 100%목적이 아니며, 중복테스트, 자주 변경되는 테스크 코드는 일단 보류하자)
"테스트 케이스는 성공케이스에 대한 집중이 아닌 실패케이스 집중을 통해 시스템의 안정성을 검증하는데 있다."
(의도한대로 실패하는가 > 실패상황에서도 장애없이 잘 동작하는가?)
3. Spring Boot에 Kotlin 조합의 테스트 코드 기본
: Spring Boot Starter Test 패키지는 아래를 포함합니다:
1) JUnit 5 – 테스트 프레임워크
2) Spring Test – Spring 컨텍스트 지원
3) Mockito – Mock 객체 생성 (MockK - io.mockk:mockk)
4) AssertJ – 가독성 좋은 Assertions
4. 프로젝트 build.gradle.kts 예시
dependencies {
testImplementation("org.springframework.boot:spring-boot-starter-test")
testImplementation("io.mockk:mockk:1.13.8")
}
5. 테스트 종류

6. 테스트 작성 순서 예시
- mockapi 기반에 controller 정상처리 테스트 진행
- 통합테스트 정상 테스트 진행
- 도메인 서비스를 대상, 예외기반(실패 case)의 단위테스트 진행
7. 통합테스트 코드 예시
@Test
fun `주문 저장 통합 테스트`() {
// when
val order = orderService.createOrder(
userId = 1L,
items = listOf(OrderItem(2L, 3))
)
// then
val saved = orderRepository.findById(order.id!!)
assertThat(saved).isPresent
assertThat(saved.get().userId).isEqualTo(1L)
}
- MockMvc : 서버를 띄우지 않고 Controller 테스트 수행
- @AutoConfigureMockMvc : MockMvc 자동 설정
- andExpect : HTTP 상태 코드 및 응답 Body 검증
6. 단위 테스트와 Mock 객체 사용 예시
: 단위 테스트에서는 외부 의존성을 모킹 함.
class OrderServiceTest {
private val orderRepository = mockk<OrderRepository>()
private val orderService = OrderService(orderRepository)
@Test
fun `주문 저장 호출 테스트`() {
every { orderRepository.save(any()) } returns Order(...)
val order = orderService.createOrder(1, listOf(...))
assertThat(order).isNotNull
verify { orderRepository.save(any()) }
}
}
- mockk() : Mock 객체 생성
- every { ... } returns ... : Mock 행동 정의
- verify { ... } : 호출 검증
7. 테스트 코드 실행
./gradlew test
8. 요약
- 테스트 코드는 단순 코드 검증을 넘어 품질 보증, 회귀 방지, 문서화 도구
- Spring Boot 환경에서 JUnit, MockMvc, MockK 를 활용하면 다양한 레이어의 테스트를 체계적으로 수행 가능
- 주문 기능처럼 비즈니스 로직이 포함된 엔드포인트는 통합 테스트 + 단위 테스트 병행이 효과적
'Kotlin Spring > Kotlin Spring 강의 내용' 카테고리의 다른 글
| 9) Spring 캐시 (2)분산 캐시란? (0) | 2025.09.20 |
|---|---|
| 9) Spring 캐시 (1) HomeBody 상품 리스트 구현 내 "로컬 캐싱" 추가 (0) | 2025.09.20 |
| 7) 주요 기능 개발(Back-end) (0) | 2025.09.02 |
| 6) 개발 architecture (5) 강의용 Architecture (0) | 2025.09.01 |
| 6) 개발 architecture (4) EDA(Event-Driven Architecture) 패턴 (1) | 2025.08.31 |