비동기 코드 테스트(XCTest)
XCTest로 비동기 테스트 를 작성합니다. 테스트를 async 로 표시하고, await 와 throws 를 사용하며, 실패와 시간 초과를 테스트하고 구조적 동시성의 결과를 검증합니다.
비동기 코드 테스트(XCTest)은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 3개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 3개의 강의가 포함되어 있습니다.
비동기 테스트: 기초
XCTest는 비동기 테스트를 지원합니다. 테스트는 작고 결정적으로 유지하십시오.
async테스트를 선언하고 await를 사용하십시오.- 실패를 처리하려면 throws와
do/catch를 사용하십시오. - sleep을 작은 가짜 객체나 스텁으로 대체하십시오.
비동기 성공 사례
테스트를 비동기로 표시하고 await와 함께 SUT를 호출하십시오. XCTAssertEqual과 같은 일반적인 검사를 작성하십시오.
import XCTest
import Foundation
// System Under Test (SUT)
func fetchValue() async -> Int {
try? await Task.sleep(nanoseconds: 50_000_000)
return 42
}
final class AsyncBasicsTests: XCTestCase {
func testFetchValue_returns42() async {
let v = await fetchValue()
XCTAssertEqual(v, 42)
}
}비동기 오류 처리 및 검사
비동기 오류 처리 테스트를 사용하십시오. 특정 오류의 경우 오류를 catch한 뒤 패턴 매칭하여 의도를 명확하게 유지하십시오.
import XCTest
enum NetError: Error { case offline }
func loadNumber(online: Bool) async throws -> Int {
try await Task.sleep(nanoseconds: 30_000_000)
if !online { throw NetError.offline }
return 7
}
final class AsyncThrowingTests: XCTestCase {
func testLoadNumber_success() async throws {
let n = try await loadNumber(online: true)
XCTAssertEqual(n, 7)
}
func testLoadNumber_offline_throws() async {
do {
_ = try await loadNumber(online: false)
XCTFail("Expected error")
} catch NetError.offline {
// expected
} catch {
XCTFail("Unexpected error: \\(error)")
}
}
}병렬 결과
구조적 동시성은 테스트하기 쉽습니다. async let을 사용하고 최종 결과를 검사하십시오. 불안정한 테스트를 피하려면 지연 시간을 아주 짧게 유지하십시오.
import XCTest
func compute(_ x: Int) async -> Int {
try? await Task.sleep(nanoseconds: 10_000_000)
return x * x
}
final class ParallelTests: XCTestCase {
func testParallel_asyncLet_sumsSquares() async {
async let a = compute(2)
async let b = compute(3)
let sum = await (a + b)
XCTAssertEqual(sum, 13) // 4 + 9
}
}시간 초과 테스트
연산을 짧은 sleep과 경쟁시켜 시간 초과를 테스트하십시오. 테스트를 빠르고 안정적으로 유지하려면 매우 짧은 시간을 사용하십시오.
import XCTest
enum TimeoutError: Error { case timedOut }
func withTimeout<T>(
seconds: Double,
operation: @escaping () async throws -> T
) async throws -> T {
try await withThrowingTaskGroup(of: T.self) { group in
group.addTask { try await operation() }
group.addTask {
try await Task.sleep(nanoseconds: UInt64(seconds * 1_000_000_000))
throw TimeoutError.timedOut
}
let first = try await group.next()!
group.cancelAll()
return first
}
}
final class TimeoutTests: XCTestCase {
func testTimeout_timesOutFast() async {
do {
_ = try await withTimeout(seconds: 0.01) {
try await Task.sleep(nanoseconds: 50_000_000) // slower than timeout
return "OK"
}
XCTFail("Expected timeout")
} catch TimeoutError.timedOut {
// expected
} catch {
XCTFail("Unexpected error: \\(error)")
}
}
}기대 조건(기존 방식)
오래된 콜백에는 여전히 기대 조건/대기를 사용하십시오. 새 코드에는 비동기 테스트를 우선하십시오.
import XCTest
// Legacy API with a completion handler
func legacyFetch(_ completion: @escaping (String) -> Void) {
Task { try? await Task.sleep(nanoseconds: 20_000_000); completion("done") }
}
final class ExpectationTests: XCTestCase {
func testLegacy_withExpectation() {
let exp = expectation(description: "legacy finishes")
legacyFetch { value in
XCTAssertEqual(value, "done")
exp.fulfill()
}
wait(for: [exp], timeout: 1.0)
}
}현대적인 비동기 테스트 방식
간단 확인: 비동기 함수를 테스트하는 모범 사례는 무엇인가요?
요약
요약: await와 함께 async XCTest 메서드를 사용하고, 성공 및 실패 경로를 검사하며, 지연 시간은 짧게 유지하십시오. 기대 조건은 기존 콜백에만 사용하십시오.
자주 묻는 질문
“비동기 코드 테스트(XCTest)” 강의는 무료인가요?
네 — “비동기 코드 테스트(XCTest)” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 3개의 강의가 포함되어 있습니다.
“비동기 코드 테스트(XCTest)”에서 뭘 배우나요?
XCTest로 비동기 테스트 를 작성합니다. 테스트를 async 로 표시하고, await 와 throws 를 사용하며, 실패와 시간 초과를 테스트하고 구조적 동시성의 결과를 검증합니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Swift Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 3개 중 3번째 강의입니다.
“비동기 코드 테스트(XCTest)” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 생산자/소비자, 파이프라인, 시간 초과
- 기존 콜백/Combine을 async/await로 연결하기
- 비동기 코드 테스트(XCTest)