0Pricing
Swift Academy · 강의

비동기 테스트와 성능 측정

async/await로 비동기 함수를 테스트하고 XCTMeasureOptions로 측정합니다.

비동기 테스트와 성능 측정은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

비동기 함수 테스트

테스트 본문 안에서 추가적인 반복 코드 없이 await를 직접 사용하려면 테스트 메서드를 async throws로 선언합니다.

final class FetcherTests: XCTestCase {
  func testFetchReturnsUser() async throws {
    let user = try await UserService().fetchUser(id: 1)
    XCTAssertEqual(user.name, "Alice")
  }
}

비동기 setUp과 tearDown

각 테스트 전에 비동기 초기화를 수행하려면 setUp() async throws를 재정의합니다.

override func setUp() async throws {
  try await super.setUp()
  sut = await AsyncService.make()
}

콜백 API를 위한 XCTestExpectation

async/await 대신 콜백을 사용하는 API에는 XCTestExpectation과 wait(for:timeout:)을 사용합니다.

func testCallback() {
  let exp = expectation(description: "data received")
  service.fetchWithCallback { data in
    XCTAssertNotNil(data)
    exp.fulfill()
  }
  wait(for: [exp], timeout: 5.0)
}

기대 조건 반전

반전된 기대 조건은 충족되면 실패합니다. 콜백이 호출되지 않아야 하는지 확인할 때 유용합니다.

let noCall = expectation(description: "should not fire")
noCall.isInverted = true
cancelledTask.onComplete { noCall.fulfill() }
wait(for: [noCall], timeout: 1.0)

성능 측정을 위한 XCTMeasure

measure {}는 블록을 10번 실행하고 평균 시간, 표준 편차, 기준값과의 비교를 보고합니다.

func testSortPerformance() {
  let data = Array(0..<10_000).shuffled()
  measure {
    _ = data.sorted()
  }
}

XCTMeasureOptions

반복 횟수와 측정할 지표(시간, 메모리, CPU)를 구성합니다.

func testParsePerformance() {
  let options = XCTMeasureOptions()
  options.iterationCount = 5
  measure(options: options) {
    _ = try? JSONDecoder().decode([Item].self, from: largeJSON)
  }
}

비동기 성능 측정

비동기 작업을 측정하려면 비동기 블록과 함께 measure(metrics:options:block:)을 사용합니다.

func testAsyncFetchPerformance() {
  measure {
    let exp = expectation(description: "done")
    Task {
      _ = try? await service.fetchAll()
      exp.fulfill()
    }
    wait(for: [exp], timeout: 10)
  }
}

기준값

측정 테스트를 실행한 후 Xcode에서 기준값을 설정합니다. 이후 실행에서 성능이 임계값을 초과하여 저하되면 실패합니다.

// Xcode: click the grey icon next to the measure test
// → "Set Baseline" to record the current average
// Subsequent runs compare against the baseline

액터 격리 코드 테스트

await를 사용하여 테스트에서 액터로 격리된 상태에 접근합니다.

actor Counter { var value = 0; func increment() { value += 1 } }
final class CounterTests: XCTestCase {
  func testIncrement() async {
    let counter = Counter()
    await counter.increment()
    let val = await counter.value
    XCTAssertEqual(val, 1)
  }
}

Swift Testing 프레임워크(Swift 6)

Swift 6에는 XCTest의 현대적인 대안인 새로운 Testing 프레임워크가 포함되어 있으며, @Test, #expect, @Suite를 제공합니다.

import Testing

@Suite struct MathTests {
  @Test func addition() {
    #expect(2 + 2 == 4)
  }
}

XCTest와 Swift Testing 결합

XCTest에서 Swift Testing으로 마이그레이션하는 동안 두 프레임워크를 동일한 테스트 대상에서 함께 사용할 수 있습니다.

import XCTest
import Testing
// Legacy XCTestCase tests alongside @Test functions
// Both run when the test target is executed

빠른 확인

코드 블록의 성능을 측정하고 저장된 기준값과 비교하는 XCTest API는 무엇입니까?

학습 내용 정리

테스트 메서드를 async throws로 표시하면 await를 직접 사용할 수 있습니다. 콜백 API에는 XCTestExpectation을 사용하십시오. measure {}로 측정하고 회귀 감지를 위해 기준값을 설정하십시오. 액터는 await로 테스트하십시오. 최신 테스트에는 스위프트 테스팅의 @Test와 #expect를 살펴보십시오.

자주 묻는 질문

“비동기 테스트와 성능 측정” 강의는 무료인가요?

네 — “비동기 테스트와 성능 측정” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“비동기 테스트와 성능 측정”에서 뭘 배우나요?

async/await로 비동기 함수를 테스트하고 XCTMeasureOptions로 측정합니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Swift Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“비동기 테스트와 성능 측정” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. XCTestCase 설정, 해제 및 테스트 메서드
  2. XCTAssert 계열과 오류 발생 검증
  3. 프로토콜 기반 모킹과 의존성 주입
  4. 비동기 테스트와 성능 측정
← Swift Academy(으)로 돌아가기