Testes em Swift (iOS/macOS): frameworks e ferramentas

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Testes em Swift (iOS/macOS): visão geral de frameworks e ferramentas



A qualidade de aplicativos móveis e desktop em Swift depende diretamente de um sistema de testes bem estruturado. No ecossistema Apple, existem vários frameworks maduros que cobrem todos os níveis da pirâmide de testes: desde testes unitários até testes de UI e testes de regressão visual. Neste artigo, vamos analisar as principais ferramentas, seus recursos e fornecer exemplos práticos em Swift.



1. XCTest — framework padrão da Apple



XCTest está integrado ao Xcode e é a principal ferramenta para escrever testes unitários e de UI. Ele suporta testes assíncronos, desempenho e integração com CI/CD.



Exemplo de teste unitário:

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, "A adição deve estar correta") }

func testAsyncOperation() { let expectation = XCTestExpectation(description: "Operação assíncrona") calculator.fetchRemoteValue { value in XCTAssertGreaterThan(value, 0) expectation.fulfill() } wait(for: [expectation], timeout: 5.0) }}


Principais recursos do XCTest:

  • Asserções: XCTAssertEqual, XCTAssertNil, XCTAssertThrowsError
  • Medição de desempenho com measure
  • Testes de UI com XCUIApplication e XCUIElement
  • Suporte para execução paralela de testes


2. Quick + Nimble — abordagem BDD



Quick é um framework BDD que permite escrever testes no estilo "Given-When-Then". Nimble é seu complemento, fornecendo matchers expressivos.



Exemplo com Quick/Nimble:

import Quickimport Nimble

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

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

context("quando a idade é válida") { it("deve ser adulto") { expect(user.isAdult).to(beTrue()) } }

context("ao atualizar o nome") { it("altera o nome corretamente") { user.updateName("Bob") expect(user.name) == "Bob" } } } }}


Vantagens:

  • Testes legíveis, compreensíveis para não-programadores
  • Matchers flexíveis: beCloseTo(), contain(), throwError()
  • Suporte para assincronia com toEventually()


3. XCUITest — Testes de UI



Para testar a interface do usuário, utiliza-se XCUITest. Ele simula ações do usuário: toques, deslizes, entrada de texto.



Exemplo de teste de UI para 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