runTest?
코루틴을 사용한 단위 테스트 코드는 일반적으로 runTest 블럭으로 감싸서 실행하는 것을 볼 수 있었습니다.
지금까지는 runTest 블록으로 감싸지 않으면 컴파일 에러가 발생하기 때문에 감싸는 것으로 생각했습니다.
하지만 runTest 감싸지 않아도 멀쩡히 컴파일 되고, 단위 테스트 통과까지 가능한 상황을 경험하게 되었습니다.
그렇다 보니 코루틴을 사용한 단위 테스트에서 runTest를 사용하는 이유가 궁금해졌습니다.
코루틴을 사용한 단위 테스트에서 runTest를 사용하는 이유
그 이유는 runTest를 사용하면 하위 코루틴들을 runTest라는 최상위 테스트 코루틴으로 계층화 할 수 있기 때문입니다.
runTest라는 최상위 테스트 코루틴으로 계층화할 때의 장점은 아래와 같습니다
1. 코루틴 실행 중 발생할 수 있는 예외를 캐치하여 처리할 수 있습니다.
만약 runTest 블록으로 감싸지 않으면 예외가 발생했을 때 테스트가 중단되고 테스트 결과도 실패로 처리됩니다.
하지만 runTest 블록으로 감싸면 예외를 캐치하고 처리하면서 테스트를 계속 진행할 수 있습니다.
2. 코루틴이 완료될 때까지 대기할 수 있습니다.
코루틴은 비동기적으로 동작하기 때문에, 코루틴이 완료되기 전에 테스트가 종료될 수 있습니다.
하지만 runTest 블록으로 감싸면 코루틴이 완료될 때까지 대기할 수 있으므로 테스트를 완료할 수 있습니다.
3. 코루틴이 실행되는 시간을 제어할 수 있습니다.
코루틴은 비동기적으로 실행되기 때문에, 실행 시간을 예측하기 어렵습니다.
이 때, runTest 함수를 사용하면, 코루틴이 실행되는 시간을 제어할 수 있습니다.
runTest 함수는 코루틴이 일정 시간 안에 실행되지 않으면, 테스트를 실패하도록 만들 수 있습니다.
이를 통해, 코루틴이 예상치 못한 시간 동안 실행되어서 테스트가 무한정 대기하는 상황을 방지할 수 있습니다.
때문에 코루틴을 테스트 할 때 runTest 블록으로 감싸지 않아도 정상적으로 작동할 수 있지만, 감싸서 테스트하는 것이 안전합니다.