Swift Academy · leksjon

Asynkrone tester og ytelsesmåling

Test async-funksjoner med async/await, og mål ytelsen med XCTMeasureOptions.

Leksjon 4 av 413 trinn

Asynkrone tester og ytelsesmåling er en gratis leksjon i Swift Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Swift Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Swift Academy inneholder totalt 4 leksjoner.

Teste asynkrone funksjoner

Deklarer testmetoder som async throws for å bruke await direkte i testkroppen uten ekstra standardkode.

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

Asynkrone setUp og tearDown

Overstyr setUp() async throws for å utføre asynkron initialisering før hver test.

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

XCTestExpectation for callback-API-er

For API-er som bruker callback-er i stedet for async/await, bruker du XCTestExpectation og 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)
}

Invertere forventninger

En invertert forventning mislykkes hvis den faktisk blir oppfylt – nyttig når du skal kontrollere at en callback ikke blir kalt.

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

XCTMeasure for ytelse

measure {} kjører blokken ti ganger og rapporterer gjennomsnittstid, standardavvik og sammenligning med en grunnlinje.

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

XCTMeasureOptions

Konfigurer antall iterasjoner og hvilken måleenhet som skal måles (tid, minne eller CPU).

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

Asynkron ytelsesmåling

Bruk measure(metrics:options:block:) med en asynkron blokk for å måle asynkrone operasjoner.

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

Grunnlinjer

Angi en grunnlinje i Xcode etter at du har kjørt en måletest. Fremtidige kjøringer mislykkes hvis ytelsen blir dårligere enn terskelen.

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

Teste skuespillerisolert kode

Få tilgang til skuespillerisolert tilstand fra tester ved å bruke 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-rammeverket (Swift 6)

Swift 6 leveres med det nye Testing-rammeverket, som inneholder @Test, #expect og @Suite som et moderne alternativ til XCTest.

import Testing

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

Kombinere XCTest og Swift Testing

Begge rammeverkene kan brukes side om side i samme testmål under migrering fra XCTest til Swift Testing.

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

Kort kontroll

Hvilket XCTest-API måler ytelsen til en kodeblokk og sammenligner den med en lagret grunnlinje?

Leksjonsoppsummering

Merk testmetoder med async throws for å bruke await direkte. Bruk XCTestExpectation for callback-API-er. Mål ytelsen med measure {} og angi baseline-verdier for å oppdage regresjoner. Test aktører med await. Utforsk @Test og #expect i Swift Testing for moderne tester.

Gratis å komme i gang

Lær deg Swift med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
122
Leksjoner
409

Ofte stilte spørsmål

Er leksjonen «Asynkrone tester og ytelsesmåling» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Swift Academy, inkludert «Asynkrone tester og ytelsesmåling», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Swift Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Asynkrone tester og ytelsesmåling»?

Test async-funksjoner med async/await, og mål ytelsen med XCTMeasureOptions. Du øver på Swift Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Swift Academy?

Ingen tidligere erfaring er nødvendig. Swift Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «Asynkrone tester og ytelsesmåling»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Swift Academy-leksjonen?

Ja. Alle Swift Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. XCTestCase-oppsett, nedrigging og testmetoder
  2. XCTAssert-familien og assertions som kaster feil
  3. Protokollbasert mocking og avhengighetsinjeksjon
  4. Asynkrone tester og ytelsesmåling
← Tilbake til Swift Academy