iOS SwiftUI Asynchronous unit test with timeout

사용 언어: Swift 5
사용 버전: Xcode 15.1

iOS 스위프트유아이 Asynchronous unit test with timeout을 알아보겠습니다.


Concurrency(동시성)을 이용하여 만든 함수를 Unit(유닛) test 하려면 어떻게 해야 할까요? 또, 일정 시간 지난 뒤에 값을 확인하고 싶다면 어떻게 해야 할까요?
위의 두 문제를 해결하기 위해 Task, async, await 등의 키워드를 사용하여 테스트하는 방법을 알아봅니다.


요런 async(어씽크) 함수가 있습니다.






이 함수를 테스트하려면 이렇게 합니다.
Test Case 함수에 async를 붙여줍니다. 또, try를 사용하게 된다면 throws도 같이 적어줍니다.
그리고 테스트할 함수에는 await를 적어줍니다.






위와 같이 테스트를 작성하면 해당 함수가 완전히 완료되는 경우가 확인 가능합니다.

만약 중간에 멈추고 값을 확인하고 싶다면 어떻게 해야 할까요?
예를 들어 1초마다 5를 더하는 함수가 있다면, 5초 때에는 25인지 확인하고 싶다면 위의 방법으로는 확인할 수 없습니다.


이럴 때 사용하는 것이 withThrowingTaskGroup입니다.
group.addTask를 활용해서 Task Group에 Task를 추가합니다.
42번째 줄처럼 하나의 Task(테스크)는 Task.sleep을 이용해서 멈추는 시간을 지정합니다.
44번째 줄처럼 group.next를 사용하면 child task 중에 가장 먼저 반환되는 값을 기다립니다.
둘 중 하나가 종료되면 group.cancelAll로 모든 작업을 종료합니다.






그러면, 중간에 작업이 중단되기 때문에 중간 값을 확인할 수 있습니다.



참고 프로젝트:


끝.


카테고리: iOS, SwiftUI

댓글

이 블로그의 인기 게시물

Python urllib.parse.quote()

Python OpenCV 빈 화면 만들기

tensorflow tf.random.uniform()

Android Notification with Full Screen

KiCad 시작하기 2 (PCB 만들기)

Android Minimum touch target size

Python bs4.SoupStrainer()

KiCad 시작하기 4 (기존 회로도 수정 및 추가)

음악 총보(Score), 파트보(Part)

tensorflow tf.expand_dims()