Asynkrona tester och prestandamätning
Testa asynkrona funktioner med async/await och mät med XCTMeasureOptions.
Asynkrona tester och prestandamätning är en gratis lektion i Swift Academy på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Swift Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Swift Academy innehåller totalt 4 lektioner.
Testa asynkrona funktioner
Deklarera testmetoder som async throws för att använda await direkt i testmetoderna utan extra kod.
final class FetcherTests: XCTestCase {
func testFetchReturnsUser() async throws {
let user = try await UserService().fetchUser(id: 1)
XCTAssertEqual(user.name, "Alice")
}
}Asynkrona setUp och tearDown
Åsidosätt setUp() async throws för att utföra asynkron initiering före varje test.
override func setUp() async throws {
try await super.setUp()
sut = await AsyncService.make()
}XCTestExpectation för callback-API:er
För API:er som använder callback-funktioner i stället för async/await använder du XCTestExpectation och 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)
}Invertera förväntningar
En inverterad förväntan misslyckas om den uppfylls – användbart när du vill kontrollera att en callback INTE anropas.
let noCall = expectation(description: "should not fire")
noCall.isInverted = true
cancelledTask.onComplete { noCall.fulfill() }
wait(for: [noCall], timeout: 1.0)XCTMeasure för prestanda
measure {} kör sitt block 10 gånger och rapporterar genomsnittlig tid, standardavvikelse och jämförelse med en baslinje.
func testSortPerformance() {
let data = Array(0..<10_000).shuffled()
measure {
_ = data.sorted()
}
}XCTMeasureOptions
Konfigurera antalet iterationer och vilket mått som ska mätas, till exempel tid, minne eller CPU.
func testParsePerformance() {
let options = XCTMeasureOptions()
options.iterationCount = 5
measure(options: options) {
_ = try? JSONDecoder().decode([Item].self, from: largeJSON)
}
}Asynkron prestandamätning
Använd measure(metrics:options:block:) med ett asynkront block för att mäta asynkrona operationer.
func testAsyncFetchPerformance() {
measure {
let exp = expectation(description: "done")
Task {
_ = try? await service.fetchAll()
exp.fulfill()
}
wait(for: [exp], timeout: 10)
}
}Baslinjer
När du har kört ett mättest anger du en baslinje i Xcode. Framtida körningar misslyckas om prestandan försämras mer än tröskelvärdet.
// Xcode: click the grey icon next to the measure test
// → "Set Baseline" to record the current average
// Subsequent runs compare against the baselineTesta aktorisolerad kod
Åtkom aktorisolerat tillstånd från tester med 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)
}
}Ramverket Swift Testing (Swift 6)
Swift 6 levereras med det nya ramverket Testing, som innehåller @Test, #expect och @Suite som ett modernt alternativ till XCTest.
import Testing
@Suite struct MathTests {
@Test func addition() {
#expect(2 + 2 == 4)
}
}Kombinera XCTest och Swift Testing
Båda ramverken kan samexistera i samma testmål under migreringen från XCTest till Swift Testing.
import XCTest
import Testing
// Legacy XCTestCase tests alongside @Test functions
// Both run when the test target is executedSnabb kontroll
Vilket XCTest-API mäter prestandan för ett kodblock och jämför den med en sparad baslinje?
Lektionssammanfattning
Markera testmetoder med async throws för att använda await direkt. Använd XCTestExpectation för callback-API:er. Mät med measure {} och ange baslinjer för att upptäcka regressioner. Testa actorer med await. Utforska @Test och #expect i Swift Testing för moderna tester.
Lär dig Swift med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 122
- Lektioner
- 409
Vanliga frågor
Är lektionen ”Asynkrona tester och prestandamätning” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Swift Academy, inklusive ”Asynkrona tester och prestandamätning”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Swift Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Asynkrona tester och prestandamätning”?
Testa asynkrona funktioner med async/await och mät med XCTMeasureOptions. Ni övar på Swift Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Swift Academy?
Du behöver inga förkunskaper. Utbildningen i Swift Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.
Hur lång tid tar lektionen ”Asynkrona tester och prestandamätning”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Swift Academy-lektionen?
Ja. Varje Swift Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- XCTestCase: konfiguration, nedmontering och testmetoder
- XCTAssert-familjen och assertions som kastar fel
- Protokollbaserad mocking och beroendeinjektion
- Asynkrona tester och prestandamätning