Aula 61: Testes Unitários com XCTest
Testes unitários são uma parte essencial do desenvolvimento de software que permite aos desenvolvedores garantir a correção do seu código, testando componentes individuais de forma isolada. Nesta aula, exploraremos os conceitos-chave de testes unitários em Swift usando o framework XCTest.
O que é XCTest?
XCTest é o framework que a Apple fornece para escrever testes unitários e de desempenho em Swift e Objective-C. Ele se integra perfeitamente ao Xcode, permitindo que você execute testes diretamente do IDE e veja os resultados em tempo real.
Configurando Seu Ambiente de Testes
Para começar com XCTest, você precisa criar um destino de teste em seu projeto Xcode:
- Abra seu projeto no Xcode.
- Vá em
Arquivo
->Novo
->Destinos...
. - Selecione
iOS
->Pacote de Testes Unitários
. - Clique em
Próximo
, nomeie seu destino de teste e certifique-se de que ele esteja associado ao seu destino principal do aplicativo. - Clique em
Concluir
.
Uma vez que o destino de teste é criado, o Xcode gerará um arquivo de teste padrão que você pode modificar para escrever seus testes.
Escrevendo Seu Primeiro Teste
Vamos criar uma função simples em Swift e escrever um teste unitário para ela.
Função de Exemplo
Aqui está uma função de exemplo que adiciona dois inteiros:
class Calculadora {
func adicionar(_ a: Int, _ b: Int) -> Int {
return a + b
}
}
Criando o Caso de Teste
Agora, vamos criar um caso de teste para o método adicionar
.
import XCTest
@testable import SeuModuloDeApp // Substitua pelo nome do seu módulo de aplicativo
class TestesCalculadora: XCTestCase {
var calculadora: Calculadora!
// Método de configuração chamado antes de cada método de teste na classe
override func setUp() {
super.setUp()
calculadora = Calculadora()
}
// Método de limpeza chamado após cada método de teste na classe
override func tearDown() {
calculadora = nil
super.tearDown()
}
// Caso de teste para a função adicionar
func testAdicionar() {
let resultado = calculadora.adicionar(2, 3)
XCTAssertEqual(resultado, 5, "Esperado 2 + 3 igual a 5")
let resultado2 = calculadora.adicionar(-1, 1)
XCTAssertEqual(resultado2, 0, "Esperado -1 + 1 igual a 0")
}
}
Explicando o Código
-
Declaração de Importação: Importamos
XCTest
para acessar as funcionalidades de teste e@testable import SeuModuloDeApp
para importar o código que queremos testar. -
XCTestCase: Nossa classe de teste
TestesCalculadora
herda deXCTestCase
. Esta é a classe base da qual todas as classes de teste devem herdar. -
setUp e tearDown:
setUp()
é chamado antes de cada método de teste ser executado, que é o local ideal para instanciar seus objetos.tearDown()
é chamado após cada método de teste ser executado. É útil para limpeza.
-
testAdicionar():
- Este é o nosso método de teste real. Ele começa com o prefixo
test
, que permite que o XCTest o reconheça como um caso de teste. - Chamamos o método adicionar e usamos
XCTAssertEqual
para verificar se a saída é o que esperamos.
- Este é o nosso método de teste real. Ele começa com o prefixo
Executando Seus Testes
Para executar os testes, você pode usar os seguintes métodos:
- No Xcode, clique no ícone de diamante ao lado do método de teste.
- Use
Command + U
para executar todos os testes no projeto.
O Xcode compilará os testes e os executará, mostrando os resultados no navegador de testes.
Testes Assíncronos
Às vezes, você pode precisar lidar com código assíncrono. O XCTest fornece uma maneira de lidar com isso:
func testOperacaoAssincrona() {
let expectativa = self.expectation(description: "Operação assíncrona")
// Simulando uma operação assíncrona
DispatchQueue.global().async {
sleep(1) // Simulando atraso
expectativa.fulfill()
}
// Aguardando expectativas
waitForExpectations(timeout: 2) { (error) in
XCTAssertNil(error, "Erro de timeout: \(error!)")
}
}
Conclusão
Testes unitários com XCTest são uma prática valiosa que ajuda a garantir a confiabilidade e a manutenibilidade do seu código. Nesta aula, cobrimos como configurar um ambiente de teste, escrever um teste unitário simples e entender conceitos-chave como configuração e limpeza. À medida que você avança na sua jornada de desenvolvimento em Swift, abraçar os testes unitários melhorará significativamente a qualidade do seu código e sua confiança no software que você cria. Bons testes!