Tests en Swift (iOS/macOS) : frameworks et outils

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Tests en Swift (iOS/macOS) : aperçu des frameworks et outils



La qualité des applications mobiles et de bureau en Swift dépend directement d’un système de test bien conçu. Dans l’écosystème Apple, il existe plusieurs frameworks matures couvrant tous les niveaux de la pyramide des tests : des tests unitaires aux tests d’interface utilisateur et aux tests de régression visuelle. Dans cet article, nous analyserons les outils clés, leurs fonctionnalités et fournirons des exemples pratiques en Swift.



1. XCTest — le framework standard d’Apple



XCTest est intégré à Xcode et constitue l’outil principal pour écrire des tests unitaires et d’interface utilisateur. Il prend en charge les tests asynchrones, les performances et l’intégration avec CI/CD.



Exemple de test unitaire :

import XCTest@testable import MyApp

final class CalculatorTests: XCTestCase { var calculator: Calculator!

override func setUp() { super.setUp() calculator = Calculator() }

func testAddition() { let result = calculator.add(2, 3) XCTAssertEqual(result, 5, "L’addition doit être correcte") }

func testAsyncOperation() { let expectation = XCTestExpectation(description: "Opération asynchrone") calculator.fetchRemoteValue { value in XCTAssertGreaterThan(value, 0) expectation.fulfill() } wait(for: [expectation], timeout: 5.0) }}


Fonctionnalités clés de XCTest :

  • Assertions : XCTAssertEqual, XCTAssertNil, XCTAssertThrowsError
  • Mesure des performances avec measure
  • Tests d’interface utilisateur avec XCUIApplication et XCUIElement
  • Prise en charge de l’exécution parallèle des tests


2. Quick + Nimble — approche BDD



Quick est un framework BDD qui permet d’écrire des tests dans le style "Given-When-Then". Nimble est son compagnon, offrant des matchers expressifs.



Exemple avec Quick/Nimble :

import Quickimport Nimble

class UserSpec: QuickSpec { override func spec() { describe("User model") { var user: User!

beforeEach { user = User(name: "Alice", age: 30) }

context("when age is valid") { it("should be adult") { expect(user.isAdult).to(beTrue()) } }

context("when updating name") { it("changes the name correctly") { user.updateName("Bob") expect(user.name) == "Bob" } } } }}


Avantages :

  • Tests lisibles, compréhensibles par les non-programmeurs
  • Matchers flexibles : beCloseTo(), contain(), throwError()
  • Prise en charge de l’asynchrone avec toEventually()


3. XCUITest — tests d’interface utilisateur



Pour tester l’interface utilisateur, on utilise XCUITest. Il simule les actions de l’utilisateur : tap, glissements, saisie de texte.



Exemple de test d’interface utilisateur pour iOS :

import XCTest

class LoginUITests: XCTestCase { let app = XCUIApplication()

override func setUp() { continueAfterFailure = false app.launch() }

func testSuccessfulLogin() { let usernameField = app.textFields["username"] usernameField.tap() usernameField.typeText("testuser")

let passwordField = app.secureTextFields["password"] passwordField.tap() passwordField.typeText("password123")

app.buttons["Login"].tap() XCTAssertTrue(app.staticTexts["Welcome"].exists) }}


Recommendations