KOTLIN · 테스트
코루틴 테스트 (runTest)
kotlinx-coroutines-test의 runTest로 코루틴을 가상 시간에서 테스트합니다.
테스트중급coroutine-testrunTestvirtual-timetesting
핵심 설명
kotlinx-coroutines-test의 runTest로 코루틴을 가상 시간에서 테스트합니다.
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)이 즉시 실행됨
}학습 팁
runTest는 delay를 자동으로 건너뛰어 테스트가 빠르게 완료됩니다. advanceTimeBy로 정밀하게 시간을 제어할 수도 있습니다.
주의할 점
runBlocking으로 코루틴을 테스트하면 실제 delay만큼 대기합니다. 항상 runTest를 사용하세요.
자주 묻는 질문
코루틴 테스트 (runTest)란 무엇인가요?
kotlinx-coroutines-test 의 runTest 로 코루틴을 가상 시간에서 테스트합니다.
코루틴 테스트 (runTest) 학습 시 주의할 점은 무엇인가요?
runBlocking 으로 코루틴을 테스트하면 실제 delay 만큼 대기합니다. 항상 runTest 를 사용하세요.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.