0Pricing
Swift Academy · Lektion

Asynchrone Tests und Leistungsmessung

Testen Sie asynchrone Funktionen mit async/await und messen Sie sie mit XCTMeasureOptions.

Asynchrone Tests und Leistungsmessung ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Asynchrone Funktionen testen

Deklarieren Sie Testmethoden als async throws, um await direkt im Testkörper ohne zusätzlichen Boilerplate-Code zu verwenden.

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

Async setUp und tearDown

Überschreiben Sie setUp() async throws, um vor jedem Test eine asynchrone Initialisierung durchzuführen.

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

XCTestExpectation für Callback-APIs

Verwenden Sie bei APIs, die statt async/await Callbacks nutzen, XCTestExpectation und 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)
}

Erwartungen umkehren

Eine umgekehrte Erwartung schlägt fehl, wenn sie erfüllt WIRD – nützlich, um zu prüfen, dass ein Callback NICHT aufgerufen wird.

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

XCTMeasure für die Performance

measure {} führt seinen Block zehnmal aus und meldet die durchschnittliche Zeit, die Standardabweichung und den Vergleich mit der Baseline.

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

XCTMeasureOptions

Konfigurieren Sie die Anzahl der Iterationen und die zu messende Metrik (Zeit, Speicher, CPU).

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

Asynchrone Performance-Messung

Verwenden Sie measure(metrics:options:block:) mit einem asynchronen Block, um asynchrone Operationen zu messen.

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

Baselines

Legen Sie nach der Ausführung eines Messtests in Xcode eine Baseline fest. Zukünftige Ausführungen schlagen fehl, wenn sich die Performance über den Schwellenwert hinaus verschlechtert.

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

Actor-isolierten Code testen

Greifen Sie in Tests mit await auf Actor-isolierten Zustand zu.

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-Framework (Swift 6)

Swift 6 enthält das neue Testing-Framework mit @Test, #expect und @Suite als moderne Alternative zu XCTest.

import Testing

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

XCTest und Swift Testing kombinieren

Beide Frameworks können während der Migration von XCTest zu Swift Testing im selben Test-Target nebeneinander bestehen.

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

Kurze Überprüfung

Welche XCTest-API misst die Performance eines Codeblocks und vergleicht sie mit einer gespeicherten Baseline?

Zusammenfassung der Lektion

Markieren Sie Testmethoden mit async throws, um await direkt zu verwenden. Verwenden Sie XCTestExpectation für Callback-APIs. Messen Sie mit measure {} und legen Sie Basiswerte zur Erkennung von Regressionen fest. Testen Sie Actors mit await. Sehen Sie sich @Test und #expect aus Swift Testing für moderne Tests an.

Häufig gestellte Fragen

Ist die Lektion „Asynchrone Tests und Leistungsmessung“ kostenlos?

Ja — der vollständige Text von „Asynchrone Tests und Leistungsmessung“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Asynchrone Tests und Leistungsmessung“?

Testen Sie asynchrone Funktionen mit async/await und messen Sie sie mit XCTMeasureOptions. Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Swift Academy zu starten?

Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Asynchrone Tests und Leistungsmessung“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?

Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. XCTestCase: Setup, Teardown und Testmethoden
  2. Die XCTAssert-Familie und auslösende Assertions
  3. Protokollbasiertes Mocking und Dependency Injection
  4. Asynchrone Tests und Leistungsmessung
← Zurück zu Swift Academy