0Pricing
Swift Academy · Leçon

Tests asynchrones et mesure des performances

Tester des fonctions async avec async/await et mesurer leurs performances avec XCTMeasureOptions.

Tests asynchrones et mesure des performances est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Swift Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Swift Academy comprend 4 leçons au total.

Tester les fonctions asynchrones

Déclarez les méthodes de test avec async throws pour utiliser directement await dans le corps des tests, sans code supplémentaire.

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

setUp et tearDown asynchrones

Redéfinissez setUp() async throws pour effectuer une initialisation asynchrone avant chaque test.

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

XCTestExpectation pour les API à rappels

Pour les API qui utilisent des rappels plutôt que async/await, utilisez XCTestExpectation et 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)
}

Inversion des attentes

Une attente inversée échoue si elle EST satisfaite : c'est utile pour vérifier qu'un rappel n'est PAS appelé.

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

XCTMeasure pour les performances

measure {} exécute son bloc 10 fois et indique la durée moyenne, l'écart type et la comparaison avec la référence.

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

XCTMeasureOptions

Configurez le nombre d'itérations et la métrique à mesurer (durée, mémoire, CPU).

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

Mesure des performances asynchrones

Utilisez measure(metrics:options:block:) avec un bloc asynchrone pour mesurer les opérations asynchrones.

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

Références

Après avoir exécuté un test de mesure, définissez une référence dans Xcode. Les exécutions futures échouent si les performances se dégradent au-delà du seuil.

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

Tester du code isolé par un acteur

Accédez depuis les tests à l'état isolé par un acteur en utilisant 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 fournit un nouveau framework Testing avec @Test, #expect et @Suite, comme alternative moderne à XCTest.

import Testing

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

Combinaison de XCTest et de Swift Testing

Les deux frameworks peuvent coexister dans la même cible de test pendant la migration de XCTest vers Swift Testing.

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

Vérification rapide

Quelle API XCTest mesure les performances d'un bloc de code et les compare à une référence enregistrée ?

Récapitulatif de la leçon

Marquez les méthodes de test avec async throws pour utiliser directement await. Utilisez XCTestExpectation avec les API à rappels. Mesurez les performances avec measure {} et définissez des valeurs de référence pour détecter les régressions. Testez les acteurs avec await. Découvrez l’annotation @Test de Swift Testing et #expect pour des tests modernes.

Questions Fréquemment Posées

La leçon « Tests asynchrones et mesure des performances » est-elle gratuite ?

Oui — le texte complet de « Tests asynchrones et mesure des performances » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Swift Academy, passe à CoddyKit PRO. Le cours Swift Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Tests asynchrones et mesure des performances » ?

Tester des fonctions async avec async/await et mesurer leurs performances avec XCTMeasureOptions. Tu pratiques Swift Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Swift Academy ?

Aucune expérience préalable n'est requise. Swift Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Tests asynchrones et mesure des performances » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Swift Academy ?

Oui. Chaque leçon Swift Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Configuration de XCTestCase, démontage et méthodes de test
  2. Famille XCTAssert et assertions générant des erreurs
  3. Simulation fondée sur des protocoles et injection de dépendances
  4. Tests asynchrones et mesure des performances
← Retour à Swift Academy