해결된 질문
작성
·
43
1
안녕하세요 강사님!
강의 복습 중에 runTest 관련 문의가 있어서 다음과 같이 질문을 남기게 됐습니다.
코루틴 테스트 심화
강의의 4:07초에 시작되는 부분을 보면 runTest를 호출해 실행되는 코루틴은 메인 스레드를 사용한다
라고 해주셨습니다.
제가 실제로 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
스레드가 메인
스레드 처럼 동작하기 때문에 메인
이라고 말씀해주신 걸까요??
감사합니다!
답변 2
2
denia park 님 안녕하세요. 지식 공유자 조세영입니다.
runTest는 기본적으로 테스트 환경에서 실행되며, 코루틴 테스트 환경에서 메인 스레드 처럼 동작하는 Test worker 스레드에서 동작합니다. 이 부분은 조금 설명이 잘못 된 부분이 있는 것 같습니다. runTest 함수가 호출되면, runTest로 만들어진 코루틴이 완료될 때까지 호출된 스레드를 점유하고 블로킹하는데요. 이 부분에서는 메인스레드에서 runTest가 호출되었습니다.
즉, runTest는 Test worker 스레드에서 실행되는 것이 맞고, 메인 스레드에서 runTest가 호출되기 때문에 코루틴이 실행 완료될 때까지 메인 스레드가 블로킹되게 됩니다. 따라서 위 설명은 다음과 같이 수정되는 것이 맞습니다.
runTest를 호출해 실행되는 코루틴은 호출 스레드를 블로킹하며, 내부의 모든 코루틴이 실행 완료될 때까지 종료를 방지한다.
이 부분은 빠른 시일 내에 조금 더 명확한 설명으로 대체할 수 있도록 하겠습니다. 질문 주셔서 감사합니다.
1
정확하게 제대로 알려주셔서 정말 감사합니다!
제대로 이해가 되었습니다.
연말이 얼마 남지 않았는데, 새해 복 많이 받으세요.