Portable exécutant des tests unitaires sur macOS isolé pour Swift Testing et XCTest

2026 Swift Testing sur Mac loué à la journée : coexistence XCTest, aide-mémoire #expect et matrice décisionnelle 1–3 jours

Xcode 26 affiche les gabarits @Test, mais supprimer d’un coup des milliers de XCTestCase est risqué—les suites UI et performance restent sur XCTest. Sur la machine principale cohabitent certificats et branches d’essai ; un remplacement total des targets de test peut rougir la CI une semaine. Ce guide s’adresse aux leads iOS qui doivent migrer les unités en 1–3 jours tout en gardant des targets mixtes : trois irritants, matrice de coexistence, sept étapes, tableau de triage, trois métriques—avec liens vers la concurrence stricte Swift 6, le nœud CI macOS et la FAQ SSH/VNC.

01. Trois irritants

1) Contamination DerivedData : Swift Testing exécute en parallèle par défaut. Singletons legacy et UserDefaults partagés provoquent des échecs intermittents.

2) Migrer UI/performance trop tôt : En Xcode 26, l’UI et les benchmarks restent sur XCTest. Sans frontière documentée, le périmètre dérape.

3) Vert en local, rouge en CI : Nouveau target absent du scheme ou -only-testing obsolète—sans second Mac propre, on accuse le framework.

02. Matrice de coexistence

TypeChoixContrôle sur Mac loué
Unités Swift puresSwift Testing en prioritéSendable
Paramétré@Test(arguments:)Index d’échec lisible
UI / XCUITestGarder XCTestTest Plan séparé
PerformanceGarder XCTestFenêtre CPU baseline
SPM testTargetSwift Testing + swift testdouble chemin vert

03. Correspondances #expect

import Testing

struct TierTests {
    @Test(arguments: [0, 1, 99])
    func label(for count: Int) {
        #expect(!PriceTier.label(for: count).isEmpty)
    }
}

04. Sept étapes

  1. Gel : versions Xcode/Swift ; lire le runbook Swift 6 si concurrence en parallèle.
  2. Coexistence : conserver *UITests/performance ; nouveau target unitaire Swift Testing.
  3. Lots : logique pure d’abord, ≤30 cas par lot.
  4. Tags / sérialisation : Keychain, fichiers, réseau.
  5. CI : aligner scheme avec le guide nœud macOS.
  6. Preuve : xcresult, double framework vert.
  7. Effacement : clés, DerivedData ; FAQ SSH/VNC.

05. Triage et métriques

SymptômeActionÀ éviter
Local vert, CI rougeComparer scheme et args CIDésactiver le parallèle en CI
Échecs aléatoiresserialized / suites isoléesParallèle global off
Module Testing introuvableLier Testing, Swift ≥ 6@Test dans l’app
  • M1 : 45–70 % des unités migrables en premier (hors UI/perf).
  • M2 : 15–40 % de gain de durée grâce au parallèle.
  • M3 : ~25 % de discussions revert en moins après double vert sur Mac loué.

06. CI Linux vs Mac journalier

Le swift test Linux ne couvre pas simulateur iOS, Test Plans, orchestration UI. Pour une recette reproductible à deux frameworks, découplée du poste principal : Apple Silicon + Xcode 26. La location journalière compresse le CAPEX sur 1–3 jours. Guide tarifaire, FAQ.

07. FAQ

Coexistence longue ? Oui, jusqu’à alternative officielle UI/performance.

Disque ? Moins de 15 Go libres : simulateur et tests parallèles ralentissent.