Cộng đồng Hỏi & Đáp của Inflearn
[코루틴 테스트 심화] runTest의 스레드 관련 문의
Đã giải quyết
Viết
·
163
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 스레드가 메인 스레드 처럼 동작하기 때문에 메인이라고 말씀해주신 걸까요??
감사합니다!
Quiz
무엇을 '단위 테스트'에서 '단위'라고 부르나요?
전체 애플리케이션
데이터베이스 스키마
함수, 클래스 또는 모듈과 같이 독립적으로 검증 가능한 코드 조각
사용자 인터페이스 레이아웃
Câu trả lời 2
2
denia park 님 안녕하세요. 지식 공유자 조세영입니다.
runTest는 기본적으로 테스트 환경에서 실행되며, 코루틴 테스트 환경에서 메인 스레드 처럼 동작하는 Test worker 스레드에서 동작합니다. 이 부분은 조금 설명이 잘못 된 부분이 있는 것 같습니다. runTest 함수가 호출되면, runTest로 만들어진 코루틴이 완료될 때까지 호출된 스레드를 점유하고 블로킹하는데요. 이 부분에서는 메인스레드에서 runTest가 호출되었습니다.
즉, runTest는 Test worker 스레드에서 실행되는 것이 맞고, 메인 스레드에서 runTest가 호출되기 때문에 코루틴이 실행 완료될 때까지 메인 스레드가 블로킹되게 됩니다. 따라서 위 설명은 다음과 같이 수정되는 것이 맞습니다.
runTest를 호출해 실행되는 코루틴은 호출 스레드를 블로킹하며, 내부의 모든 코루틴이 실행 완료될 때까지 종료를 방지한다.
이 부분은 빠른 시일 내에 조금 더 명확한 설명으로 대체할 수 있도록 하겠습니다. 질문 주셔서 감사합니다.
1






정확하게 제대로 알려주셔서 정말 감사합니다!
제대로 이해가 되었습니다.
연말이 얼마 남지 않았는데, 새해 복 많이 받으세요.