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): frameworks e ferramentas



O desenvolvimento de aplicações de qualidade para as plataformas Apple é impossível sem testes sistemáticos. No ecossistema Swift, existe um conjunto poderoso de ferramentas que cobre todos os níveis — desde testes unitários até testes de UI e análise estática. Neste artigo, vamos explorar os principais frameworks e práticas que o ajudarão a aumentar a confiabilidade do código e acelerar o desenvolvimento.



1. XCTest — a base dos testes

XCTest é um framework integrado da Apple, disponível no Xcode. Ele fornece funcionalidades básicas para escrever testes unitários, testes de UI e testes de desempenho. O XCTest está integrado ao Xcode Test Navigator e suporta execução tanto em simuladores quanto em dispositivos reais.

Exemplo de um teste unitário simples para o modelo Calculator:

import XCTest@testable import MyApp

final class CalculatorTests: XCTestCase { var calculator: Calculator!

override func setUpWithError() throws { calculator = Calculator() }

override func tearDownWithError() throws { calculator = nil }

func testAddition() throws { let result = calculator.add(2, 3) XCTAssertEqual(result, 5, "A adição deve estar correta") }

func testDivisionByZero() throws { XCTAssertThrowsError(try calculator.divide(10, 0)) { error in XCTAssertEqual(error as? CalculatorError, .divisionByZero) } }}

Principais funcionalidades do XCTest:

  • XCTAssert — conjunto de asserções (igualdade, verdade, lançamento de erros)
  • setUp/tearDown — ciclo de vida da classe de teste
  • measure — medição de desempenho de blocos de código
  • Testes de UI — gravação e reprodução de interações com a interface


2. Quick e Nimble — estilo BDD

Quick é um framework para Behaviour-Driven Development (BDD) que permite descrever testes em linguagem natural. Nimble é uma biblioteca de matchers que expande as capacidades das asserções. Juntos, eles tornam os testes legíveis para toda a equipe, incluindo gerentes e analistas.

Exemplo de teste usando Quick/Nimble:

import Quickimport Nimble@testable import MyApp

class LoginSpec: QuickSpec { override func spec() { describe("LoginViewController") { var viewController: LoginViewController!

beforeEach { viewController = LoginViewController() _ = viewController.view // Carregar a view }

context("quando dados corretos são inseridos") { it("deve chamar o método de autenticação") { viewController.emailTextField.text = "user@example.com" viewController.passwordTextField.text = "password123" viewController.loginButtonTapped() expect(viewController.isAuthorized).to(beTrue()) } }

context("quando a senha está vazia") { it("deve mostrar um erro") { viewController.emailTextField.text = "user@example.com" viewController.passwordTextField.text = "" viewController.loginButtonTapped() expect(viewController.errorLabel.isHidden).to(beFalse()) } } } }}
  • describe/context/it — estrutura hierárquica de especificações
  • beforeEach/afterEach — hooks para preparação do estado
  • expect(...).to(...) — verificações legíveis com vários matchers


3. SnapshotTesting — testes visuais

A biblioteca SnapshotTesting da Point-Free permit

Recommendations