Test asincroni e misurazione delle prestazioni
Testare funzioni async con async/await e misurare le prestazioni con XCTMeasureOptions.
Test asincroni e misurazione delle prestazioni è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Swift Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Swift Academy include 4 lezioni in totale.
Test delle funzioni asincrone
Dichiari i metodi di test come async throws per utilizzare direttamente await nei corpi dei test, senza codice aggiuntivo.
final class FetcherTests: XCTestCase {
func testFetchReturnsUser() async throws {
let user = try await UserService().fetchUser(id: 1)
XCTAssertEqual(user.name, "Alice")
}
}setUp e tearDown asincroni
Sovrascriva setUp() async throws per eseguire l'inizializzazione asincrona prima di ogni test.
override func setUp() async throws {
try await super.setUp()
sut = await AsyncService.make()
}XCTestExpectation per le API basate su callback
Per le API che utilizzano callback invece di async/await, utilizzi XCTestExpectation e 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)
}Inversione delle aspettative
Un'aspettativa invertita fa fallire il test se viene soddisfatta: è utile per verificare che una callback non venga chiamata.
let noCall = expectation(description: "should not fire")
noCall.isInverted = true
cancelledTask.onComplete { noCall.fulfill() }
wait(for: [noCall], timeout: 1.0)XCTMeasure per le prestazioni
measure {} esegue il proprio blocco 10 volte e restituisce il tempo medio, la deviazione standard e il confronto con la baseline.
func testSortPerformance() {
let data = Array(0..<10_000).shuffled()
measure {
_ = data.sorted()
}
}XCTMeasureOptions
Configuri il numero di iterazioni e la metrica da misurare, come tempo, memoria o CPU.
func testParsePerformance() {
let options = XCTMeasureOptions()
options.iterationCount = 5
measure(options: options) {
_ = try? JSONDecoder().decode([Item].self, from: largeJSON)
}
}Misurazione delle prestazioni asincrone
Utilizzi measure(metrics:options:block:) con un blocco asincrono per misurare le operazioni asincrone.
func testAsyncFetchPerformance() {
measure {
let exp = expectation(description: "done")
Task {
_ = try? await service.fetchAll()
exp.fulfill()
}
wait(for: [exp], timeout: 10)
}
}Baseline
Dopo aver eseguito un test di misurazione, imposti una baseline in Xcode. Le esecuzioni future falliranno se le prestazioni peggiorano oltre la soglia.
// Xcode: click the grey icon next to the measure test
// → "Set Baseline" to record the current average
// Subsequent runs compare against the baselineTest del codice isolato da un actor
Acceda allo stato isolato da un actor nei test utilizzando 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)
}
}Framework Swift Testing (Swift 6)
Swift 6 include il nuovo framework Testing, con @Test, #expect e @Suite, come alternativa moderna a XCTest.
import Testing
@Suite struct MathTests {
@Test func addition() {
#expect(2 + 2 == 4)
}
}Combinare XCTest e Swift Testing
Durante la migrazione da XCTest a Swift Testing, entrambi i framework possono coesistere nello stesso target di test.
import XCTest
import Testing
// Legacy XCTestCase tests alongside @Test functions
// Both run when the test target is executedVerifica rapida
Quale API XCTest misura le prestazioni di un blocco di codice e le confronta con una baseline salvata?
Riepilogo della lezione
Contrassegnare i metodi di test con async throws per usare direttamente await. Usare XCTestExpectation per le API basate su callback. Misurare le prestazioni con measure {} e impostare baseline per rilevare le regressioni. Testare gli actor con await. Esplorare @Test e #expect di Swift Testing per i test moderni.
Impara Swift con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 122
- Lezioni
- 409
Domande Frequenti
La lezione «Test asincroni e misurazione delle prestazioni» è gratuita?
Sì — il testo completo di «Test asincroni e misurazione delle prestazioni» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Swift Academy, passa a CoddyKit PRO. Il corso Swift Academy include 4 lezioni in totale.
Cosa imparerò in «Test asincroni e misurazione delle prestazioni»?
Testare funzioni async con async/await e misurare le prestazioni con XCTMeasureOptions. Eserciti Swift Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Swift Academy?
Non è richiesta alcuna esperienza precedente. Swift Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Test asincroni e misurazione delle prestazioni»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Swift Academy?
Sì. Ogni lezione Swift Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Configurazione, teardown e metodi di test di XCTestCase
- Famiglia XCTAssert e asserzioni con errori
- Mock basati su protocolli e dependency injection
- Test asincroni e misurazione delle prestazioni