PHpullh
학습 라이브러리/Kotlin/코루틴 테스트 (runTest)

KOTLIN · 테스트

코루틴 테스트 (runTest)

kotlinx-coroutines-testrunTest로 코루틴을 가상 시간에서 테스트합니다.

테스트중급coroutine-testrunTestvirtual-timetesting

핵심 설명

kotlinx-coroutines-testrunTest로 코루틴을 가상 시간에서 테스트합니다.

Kotlin code

import kotlinx.coroutines.*
import kotlinx.coroutines.test.*

class CacheService {
    private val cache = mutableMapOf<String, String>()

    suspend fun getOrFetch(key: String): String {
        cache[key]?.let { return it }
        delay(1000) // 네트워크 지연
        val value = "data-$key"
        cache[key] = value
        return value
    }

    fun cacheSize() = cache.size
}

// 테스트
fun main() = runTest {
    val service = CacheService()

    // 첫 호출: 캐시 미스
    val result1 = service.getOrFetch("key1")
    assert(result1 == "data-key1") { "첫 호출 실패" }
    assert(service.cacheSize() == 1) { "캐시 크기 불일치" }

    // 두 번째 호출: 캐시 히트 (delay 없음)
    val result2 = service.getOrFetch("key1")
    assert(result2 == "data-key1") { "캐시 히트 실패" }

    // 가상 시간 확인
    println("테스트 통과! 가상 시간: ${currentTime}ms")
    // delay(1000)이 즉시 실행됨
}

학습 팁

runTestdelay를 자동으로 건너뛰어 테스트가 빠르게 완료됩니다. advanceTimeBy로 정밀하게 시간을 제어할 수도 있습니다.

주의할 점

runBlocking으로 코루틴을 테스트하면 실제 delay만큼 대기합니다. 항상 runTest를 사용하세요.

자주 묻는 질문

코루틴 테스트 (runTest)란 무엇인가요?

kotlinx-coroutines-test 의 runTest 로 코루틴을 가상 시간에서 테스트합니다.

코루틴 테스트 (runTest) 학습 시 주의할 점은 무엇인가요?

runBlocking 으로 코루틴을 테스트하면 실제 delay 만큼 대기합니다. 항상 runTest 를 사용하세요.