-
[Coroutine] 코루틴 학습 - 11 (runTest)Java/Kotlin 2022. 5. 14. 02:13반응형
runTest
@ExperimentalCoroutinesApi public fun runTest( context: CoroutineContext = EmptyCoroutineContext, dispatchTimeoutMs: Long = DEFAULT_DISPATCH_TIMEOUT_MS, testBody: suspend TestScope.() -> Unit ): TestResult
class Test { private val userRepository: UserRepository = mockk() @ExperimentalCoroutinesApi @Test fun `유저 한 명을 조회한다`() = runTest { // given val userId = 1L coEvery { userRepository.getUserById(userId) } returns User(userId, "Hello") // when val user = userRepository.getUserById(userId) // then user.shouldNotBeNull() user.id shouldBe 1L user.name shouldBe "Hello" } } data class User( val id: Long, val name: String, ) interface UserRepository { suspend fun getUserById(id: Long): User? }
runTest는 새로운 코루틴에서 testBody 본문을 실행한다. JVM에서 runTest는 runBlocking과 유사하게 동작하는데, delay를 통한 대기 시간을 스킵한다는 차이가 있다. runTest를 활용하면 시간이 오래 걸리는 api에 대한 시나리오를 구상하고 테스트를 하는데 용이하다.
class Test { @ExperimentalCoroutinesApi @Test fun `실제로는 delay 시간이 3000ms 걸리지만 테스트에서는 시간을 스킵하여 진행할 수 있다`() = runTest { val deferredValue = async { println(currentTime) delay(3000) println(currentTime) 30 } deferredValue.await() shouldBe 30 } } // 0 // 3000
반응형'Java > Kotlin' 카테고리의 다른 글
[Coroutine] 코루틴 학습 - 13 (Actors) (0) 2022.05.17 [Coroutine] 코루틴 학습 - 12 (Channel) (0) 2022.05.14 [Coroutine] 코루틴 학습 - 10 (Dispatchers) (0) 2022.05.10 [Coroutine] 코루틴 학습 - 9 (Coroutine scope function) (0) 2022.05.07 [Coroutine] 코루틴 학습 - 8 (Exception handling) (0) 2022.05.05