inflearn logo
강의

講義

知識共有

Kotlin コルーチン完全攻略

コルーチンユニットテストの深化

[코루틴 테스트 심화] runTest의 스레드 관련 문의

解決済みの質問

164

denia park

投稿した質問数 23

1

안녕하세요 강사님!

강의 복습 중에 runTest 관련 문의가 있어서 다음과 같이 질문을 남기게 됐습니다.

 

코루틴 테스트 심화강의의 4:07초에 시작되는 부분을 보면 runTest를 호출해 실행되는 코루틴은 메인 스레드를 사용한다라고 해주셨습니다.

 

image.png

 

제가 실제로 runTest를 이용해 코드를 실행시켜 보니 Test worker스레드를 사용하고 있다고 나왔습니다.

 

실행 코드

    @Test
    fun `메인 스레드만 사용하는 runTest`() = runTest {
        println("[${Thread.currentThread().name}] 메인 시작")
        delay(100)
        println("[${Thread.currentThread().name}] 메인 종료")
    }

결과

[Test worker @kotlinx.coroutines.test runner#2] 메인 시작
[Test worker @kotlinx.coroutines.test runner#2] 메인 종료

 

실제 사용되는 스레드는 Test worker 스레드 이지만, 테스트 코드에서 실행될 때 Test worker 스레드가 메인 스레드 처럼 동작하기 때문에 메인이라고 말씀해주신 걸까요??

 

감사합니다!

android kotlin coroutine kotlinx.coroutines android-coroutine

回答 2

2

seyoungcho2

denia park 님 안녕하세요. 지식 공유자 조세영입니다.

runTest는 기본적으로 테스트 환경에서 실행되며, 코루틴 테스트 환경에서 메인 스레드 처럼 동작하는 Test worker 스레드에서 동작합니다. 이 부분은 조금 설명이 잘못 된 부분이 있는 것 같습니다. runTest 함수가 호출되면, runTest로 만들어진 코루틴이 완료될 때까지 호출된 스레드를 점유하고 블로킹하는데요. 이 부분에서는 메인스레드에서 runTest가 호출되었습니다.

즉, runTest는 Test worker 스레드에서 실행되는 것이 맞고, 메인 스레드에서 runTest가 호출되기 때문에 코루틴이 실행 완료될 때까지 메인 스레드가 블로킹되게 됩니다. 따라서 위 설명은 다음과 같이 수정되는 것이 맞습니다.

runTest를 호출해 실행되는 코루틴은 호출 스레드를 블로킹하며, 내부의 모든 코루틴이 실행 완료될 때까지 종료를 방지한다.
이 부분은 빠른 시일 내에 조금 더 명확한 설명으로 대체할 수 있도록 하겠습니다. 질문 주셔서 감사합니다.

0

denia park

정확하게 제대로 알려주셔서 정말 감사합니다!

제대로 이해가 되었습니다.

 

연말이 얼마 남지 않았는데, 새해 복 많이 받으세요.

1

seyoungcho2

이 부분 설명을 변경한 강의가 업로드 되었습니다. 리포트 해주셔서 감사합니다!

CoroutineDispatcher에 대한 질문

0

79

2

코루틴과 JVM이 끝나는 조건에 대해 문의 드립니다.

0

83

2

Job() 생성후 complete을 불러 주어야 하는 경우가 헷깔립니다.

1

66

1

왜 runBlocking 종료로 메인스레드가 종료될까요?

0

120

1

cancel 질문드립니다.

1

85

2

delay 함수 사용 시 스레드 양보

1

127

2

강사님께서 번역해주신 코틀린 코루틴 공식 가이드 문서 문의

2

149

2

Flow와 Channel

1

146

2

[코틀린 코루틴의 정석 책 추첨 이벤트] 강의 구매 기간 관련 문의

1

221

1

job과 코루틴의 관계?

3

257

2

코루틴의 blocking I/O작업 처리

0

161

2

KTOR Server 에서 delay

0

136

2

CoroutineDispatcher(Default, IO)의 limitedParallelism 관련 질문

1

241

1

suspend 문의 드려요

2

131

2

스레드 양보 예제 + 코루틴/멀티스레드 사용 예시 질문

1

184

2

coroutineScope 관련 질문 및 실제 사용 사례에 대한 질문

1

258

3

Coroutine 취소 시점 체크

1

139

2

spring web mvc 환경에서 coroutine을 사용해보신 경험이 있으신지 궁금합니다.

1

323

2

코루틴이 멀티스레드의 단점을 해결했다는 부분에 대해 질문드립니다.

2

181

1

Dispatcher.IO의 동작원리

0

254

3

실무에서 runBlocking 와 CoroutineScope 실무 사용에 대해

0

238

2

Code3-6에서 imageProcessingDispatcher가 inline으로는 동작하지 않는 이유가 궁금합니다

1

121

2

공유 스레드 풀 질문드려요!

1

158

2

코루틴 이름 출력관련해서 질문이 있습니다!

2

160

1