O que é XCTest e para que serve?
XCTest é um framework nativo da Apple para testes unitários, funcionais e de desempenho de aplicativos em Swift (iOS, macOS, watchOS, tvOS). Ele é análogo a bibliotecas como pytest para Python ou JUnit para Java, mas totalmente integrado ao Xcode e ao Swift Package Manager. XCTest permite verificar automaticamente a correção de funções individuais, classes, componentes de UI e requisições de rede, o que é essencial para manter a qualidade do código durante o desenvolvimento de aplicativos nativos.
Como instalar o XCTest?
XCTest é fornecido junto com o Xcode e não requer instalação separada. Para começar, basta criar um novo projeto no Xcode e adicionar um target para testes (iOS Unit Testing Bundle ou macOS Unit Testing Bundle). Se você usa o Swift Package Manager, adicione a dependência import XCTest no seu arquivo de teste. Para integração com CI/CD (por exemplo, GitHub Actions), adicione o script: xcodebuild test -scheme YourScheme -destination 'platform=iOS Simulator,name=iPhone 14'.
Principais funcionalidades do XCTest
- Testes Unitários (Unit Tests) — verificação de métodos e classes individuais usando
XCTAssert. - Testes de Desempenho — medição do tempo de execução de blocos de código através de
measure. - Testes de UI — automação da interação com a interface via
XCUIApplication. - Testes Assíncronos — trabalho com expectativas através de
XCTestExpectation. - Testes Parametrizados — execução de um mesmo teste com diferentes dados de entrada (através de loops).
Exemplo de código em 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, "Esperado 5, obtido \\(result)") }
func testPerformanceExample() { measure { _ = calculator.add(1000, 2000) } }
func testAsyncNetwork() { let expectation = self.expectation(description: "Carregamento de dados") NetworkService.fetchData { data in XCTAssertNotNil(data) expectation.fulfill() } waitForExpectations(timeout: 5) }}Quando usar XCTest?
XCTest é obrigatório para todos os projetos comerciais iOS/macOS, especialmente se você trabalha em equipe ou planeja publicar na App Store. Ele ajuda a prevenir regressões durante refatorações, acelera revisões de código e automatiza a verificação de UI. Para testar requisições de rede e operações com banco de dados, XCTest é combinado com mocks (por exemplo, OHHTTPStubs). Se você está escrevendo uma biblioteca em Swift, XCTest é o padrão de facto, pois é totalmente suportado pelo Xcode e pelo Swift Package Index.