Swift Academy · Les

Async-tests en prestatiemetingen

Async-functies testen met async/await en meten met XCTMeasureOptions.

Les 4 van 413 stappen

Async-tests en prestatiemetingen is een gratis Swift Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Swift Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Swift Academy bevat in totaal 4 lessen.

Asynchrone functies testen

Declareer testmethoden als async throws om await rechtstreeks in testlichamen te gebruiken zonder extra standaardcode.

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

Asynchrone setUp en tearDown

Overschrijf setUp() async throws om vóór elke test asynchrone initialisatie uit te voeren.

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

XCTestExpectation voor API's met terugbelingen

Gebruik voor API's die terugbelingen gebruiken in plaats van async/await XCTestExpectation en 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)
}

Verwachtingen omkeren

Een omgekeerde verwachting laat de test mislukken als die WEL wordt vervuld — handig om te controleren of een terugbeling NIET wordt aangeroepen.

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

XCTMeasure voor prestaties

measure {} voert het blok 10 keer uit en rapporteert de gemiddelde tijd, de standaardafwijking en de vergelijking met een referentiewaarde.

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

XCTMeasureOptions

Configureer het aantal iteraties en welke meetwaarde moet worden gemeten (tijd, geheugen, processor).

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

Asynchrone prestaties meten

Gebruik measure(metrics:options:block:) met een asynchroon blok om asynchrone bewerkingen te meten.

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

Referentiewaarden

Stel na het uitvoeren van een meettest een referentiewaarde in Xcode in. Toekomstige uitvoeringen mislukken als de prestaties verder verslechteren dan de drempelwaarde.

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

Code met actorisolatie testen

Gebruik await om vanuit tests toegang te krijgen tot actor-geïsoleerde toestand.

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 wordt geleverd met het nieuwe Testing-framework met @Test, #expect en @Suite als modern alternatief voor XCTest.

import Testing

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

XCTest en Swift Testing combineren

Beide frameworks kunnen tijdens de migratie van XCTest naar Swift Testing naast elkaar bestaan in hetzelfde testdoel.

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

Korte controle

Welke XCTest-API meet de prestaties van een codeblok en vergelijkt die met een opgeslagen referentiewaarde?

Lesoverzicht

Markeer testmethoden met async throws om await rechtstreeks te gebruiken. Gebruik XCTestExpectation voor API's met terugroepfuncties. Meet met measure {} en stel referentiewaarden in om regressies te detecteren. Test actoren met await. Verken de @Test- en #expect-mogelijkheden van Swift Testing voor moderne testen.

Gratis beginnen

Leer Swift met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
122
Lessen
409

Veelgestelde vragen

Is de les “Async-tests en prestatiemetingen” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Swift Academy, waaronder “Async-tests en prestatiemetingen”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Swift Academy bevat in totaal 4 lessen.

Wat leer ik in “Async-tests en prestatiemetingen”?

Async-functies testen met async/await en meten met XCTMeasureOptions. Je oefent met Swift Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Swift Academy te beginnen?

Ervaring vooraf is niet nodig. Swift Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “Async-tests en prestatiemetingen”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Swift Academy?

Ja. Elke les over Swift Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. XCTestCase instellen, opruimen en testmethoden
  2. De XCTAssert-familie en assertions die fouten gooien
  3. Protocolgebaseerde mocking en dependency injection
  4. Async-tests en prestatiemetingen
← Terug naar Swift Academy