본문 바로가기
Kotlin Spring/Kotlin Spring 강의 내용

8) 테스트 코드 작성 (1)테스트 코드란?

by Bill Lab 2025. 9. 20.
반응형

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 를 활용하면 다양한 레이어의 테스트를 체계적으로 수행 가능

     - 주문 기능처럼 비즈니스 로직이 포함된 엔드포인트는 통합 테스트 + 단위 테스트 병행이 효과적

반응형