Qu'est-ce que XCTest et pourquoi en avez-vous besoin ?
XCTest est un framework intégré d'Apple pour les tests unitaires, fonctionnels et de performance des applications Swift (iOS, macOS, watchOS, tvOS). Il est l'équivalent de bibliothèques comme pytest pour Python ou JUnit pour Java, mais totalement intégré à Xcode et Swift Package Manager. XCTest permet de vérifier automatiquement le bon fonctionnement de fonctions individuelles, de classes, de composants d'interface utilisateur et de requêtes réseau, ce qui est essentiel pour maintenir la qualité du code lors du développement d'applications natives.
Comment installer XCTest ?
XCTest est fourni avec Xcode et ne nécessite pas d'installation séparée. Pour commencer, créez simplement un nouveau projet dans Xcode et ajoutez une cible de test (iOS Unit Testing Bundle ou macOS Unit Testing Bundle). Si vous utilisez Swift Package Manager, ajoutez simplement la dépendance import XCTest dans votre fichier de test. Pour l'intégration avec CI/CD (par exemple, GitHub Actions), ajoutez le script : xcodebuild test -scheme YourScheme -destination 'platform=iOS Simulator,name=iPhone 14'.
Fonctionnalités principales de XCTest
- Tests unitaires (Unit Tests) — vérification de méthodes et classes individuelles à l'aide de
XCTAssert. - Tests de performance — mesure du temps d'exécution de blocs de code via
measure. - Tests d'interface utilisateur (UI Tests) — automatisation des interactions avec l'interface via
XCUIApplication. - Tests asynchrones — gestion des attentes via
XCTestExpectation. - Tests paramétrés — exécution d'un même test avec différentes données d'entrée (via des boucles).
Exemple de code en Swift (iOS)
import XCTest
class CalculatorTests: XCTestCase { var calculator: Calculator!
override func setUp() { super.setUp() calculator = Calculator() }
override func tearDown() { calculator = nil super.tearDown() }
func testAddition() { let result = calculator.add(2, 3) XCTAssertEqual(result, 5, "Attendu 5, reçu \\(result)") }
func testPerformanceExample() { measure { _ = calculator.add(1000, 2000) } }
func testAsyncNetwork() { let expectation = self.expectation(description: "Chargement des données") NetworkService.fetchData { data in XCTAssertNotNil(data) expectation.fulfill() } waitForExpectations(timeout: 5) }}Quand utiliser XCTest ?
XCTest est obligatoire pour tous les projets commerciaux iOS/macOS, surtout si vous travaillez en équipe ou prévoyez une publication sur l'App Store. Il aide à prévenir les régressions lors du refactoring, accélère les revues de code et automatise la vérification de l'interface utilisateur. Pour tester les requêtes réseau et les interactions avec la base de données, XCTest est combiné avec des mocks (par exemple, OHHTTPStubs). Si vous écrivez une bibliothèque en Swift, XCTest est la norme de facto, car il est entièrement pris en charge par Xcode et Swift Package Index.