Testes e qualidade de código

XCTest: seu primeiro teste com Given-When-Then

Ao desenvolver para iOS, você acaba adiando aquele código de teste que precisa escrever. E, quando abre o XCTest, não sabe por onde começar.

4 min de leitura
Imagem de capa de XCTest: seu primeiro teste com Given-When-Then

Ao desenvolver para iOS, você acaba adiando aquele código de teste que precisa escrever. E, quando abre o XCTest, não sabe por onde começar.

Vou direto ao ponto: seu primeiro teste pode começar com três linhas, Given-When-Then. Preparar, executar e verificar. Depois que essa ordem vira hábito, o resto flui.

Hoje vamos revisar o básico do XCTest e escrever juntos seu primeiro teste usando esse padrão.

Afinal, o que é XCTest?

XCTest é o framework de testes que a Apple inclui por padrão no Xcode. Não é preciso instalar nada.

Ao criar o projeto, marque “Include Tests” e o target de testes será criado automaticamente.

Vamos ao essencial.

  • XCTestCase: a classe que contém os testes. Começamos herdando dela.
  • Métodos que começam com test: se o nome da função começa com test, o Xcode a reconhece automaticamente como teste.
  • Família XCTAssert: funções que verificam se os resultados estão corretos.

No começo, conhecer só essas três coisas já é suficiente.

Executar é simples. Clique no botão em forma de diamante à esquerda do método de teste ou use Command + U para rodar todos os testes.


O que é Given-When-Then?

O ponto que mais confunde quem está começando com testes é decidir em que ordem escrever o código.

Given-When-Then é o padrão que define exatamente essa ordem. Basta pensar em três blocos.

  • Given (preparação): crie os valores e o estado necessários para o teste.
  • When (execução): execute uma única vez a ação que você quer verificar.
  • Then (verificação): confira se o resultado é igual ao esperado.

Em linguagem cotidiana: “Quando houver 2 maçãs no carrinho (Given), ao calcular o valor da compra (When), o resultado deve ser 2000 wones (Then).”

Preparar, executar e verificar. Isso é tudo o que existe no Given-When-Then.

Ao separar assim, quando um teste falhar você identifica imediatamente a etapa problemática: se a preparação estava errada ou se o resultado da execução falhou.

Era só uma luz verde acesa, mas fiquei estranhamente orgulhoso.
Era só uma luz verde acesa, mas fiquei estranhamente orgulhoso.

Vamos escrever de verdade nosso primeiro teste

Vamos usar uma calculadora simples como exemplo. Suponha que exista uma função add que soma dois números.

Este é o código que vamos testar primeiro.

struct Calculator {
    func add(_ a: Int, _ b: Int) -> Int {
        return a + b
    }
}

Agora escreveremos o teste na ordem Given-When-Then. Marcar as três etapas com comentários torna a leitura muito mais fácil.

func testAddTwoNumbers() {
    // Given: Preparar a calculadora e os valores de entrada
    let calculator = Calculator()
    // When: Executar a soma
    let result = calculator.add(2, 3)
    // Then: Verificar o resultado
    XCTAssertEqual(result, 5)
}

XCTAssertEqual compara se dois valores são iguais. Se result não for 5, o teste falha em vermelho; se for 5, passa em verde.

Ainda me lembro da sensação quando a primeira luz verde acendeu. Não foi nada grandioso, mas deu uma satisfação enorme.


Resumo dos XCTAssert mais usados

Saber apenas o XCTAssertEqual já permite começar, mas escolher a asserção certa para cada situação deixa o código muito mais limpo. Organizei em uma tabela as que mais uso.

Função Quando usar
XCTAssertEqual(a, b) Se dois valores são iguais
XCTAssertTrue(condição) Se a condição é verdadeira
XCTAssertFalse(condição) Se a condição é falsa
XCTAssertNil(valor) Se o valor é nil
XCTAssertNotNil(valor) Se o valor não é nil

Se quiser deixar uma mensagem quando falhar, passe uma string como último argumento. Por exemplo: XCTAssertEqual(result, 5, “O resultado da soma está incorreto”).

Escolher apenas os XCTAssert mais usados deixa o código muito mais limpo.
Escolher apenas os XCTAssert mais usados deixa o código muito mais limpo.

Dúvidas frequentes de quem está começando

P. Onde devo colocar os arquivos de teste? R. Coloque-os na pasta Tests do projeto. Para serem executados, eles precisam estar incluídos no target de testes.

P. O When precisa ter uma única linha? R. Não precisa. Ainda assim, é melhor executar uma única ação por teste. Quando cada teste verifica apenas uma coisa, a causa da falha fica clara.

P. Como devo nomear as funções de teste? R. Comece o nome com test e deixe claro o que está sendo verificado, como em testAddTwoNumbers.


Hoje escrevemos nosso primeiro teste usando o básico do XCTest e o padrão Given-When-Then. Preparar, executar e verificar: lembre-se desses três passos.

Não se preocupe em criar o teste perfeito. Comece hoje acendendo a luz verde com uma única função add. Esse pequeno sucesso vai levar você ao próximo teste. Torço por você!