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 baselineTester 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 executedVé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
- Configuration de XCTestCase, démontage et méthodes de test
- Famille XCTAssert et assertions générant des erreurs
- Simulation fondée sur des protocoles et injection de dépendances
- Tests asynchrones et mesure des performances