Unit Tests em Swift (for Dummies)

Photo by Maxwell Nelson on Unsplash

Escrever testes, definitivamente, não é a atividade mais glamurosa durante o processo de desenvolvimento. Ao escrevê-los não tornamos nosso código mais performático ou de mais fácil acesso para desenvolvedores menos experientes. Contudo, é por de trás das cortinas que os testes fazem sua mágica.

Ao usar testes, nós desenvolvedores, somos capazes de prevenir futuros erros, bugs e que novas implementações não afetem o código base. De maneira geral, testes são a melhor arma que temos para garantir que a aplicação vai chegar ao usuário exatamente no estado que imaginamos.

O Xcode disponibiliza frameworks para a realização de Unit Tests e UI tests. Este medium busca abordar Unit Tests.

Getting Started

O primeiro passo para começar a realizar testes é adicionar as frameworks de UI Tests e Unit Tests de swift, para isso possuímos duas opções:

  • Adicionar ao criar o projeto
  • Adicionar a um projeto existente

O primeiro passo é abrir o navegador de testes apertando Command-6, em seguida clique no botão de "+" e selecione o teste desejado. Agora é só selecionar seu app nos targets e dar finish.

Ufa! Temos tudo pronto para começar escrever nossos testes.

Unit Test

Na ciência da computação, Unit Test é um nível de teste de software onde testamos cada componente individual de uma aplicação. Como estamos lidando com Swift, e o mesmo é uma linguagem orientada a objetos, as nossas menores unidades vão ser os métodos das nossas classes. A ideia por trás de utilizarmos de unidades, é por estas serem a menor parte de nossa aplicação testável, geralmente possuindo poucas entradas e uma única saída. O objetivo de cada teste vai ser validar se cada unidade da nossa aplicação funciona como planejamos.

Resumidamente, Unit Test é essencialmente um função que "roda" parte de nosso código, e nos retorna uma boolena avisando se ouve sucesso ou fracasso. No Xcode, a framework padrão para testes é a XCTestCase, que é uma subclasse de XCTest.

XCTest

Create and run unit tests, performance tests, and UI tests for your Xcode project.

XCTestCase

The primary class for defining test cases, test methods, and performance tests.

Implementação

Imagine um cenário onde você está desenvolvendo um app voltado para o mercado financeiro, o usuário possuí um carteira que tem fundos e existem ações que possuem um valor. As únicas ações que nosso usuário pode fazer é simplesmente comprar papel para sua carteira e vender os da mesma.

Em algum momento durante o processo de desenvolvimento, imagine que escrevemos um método capaz de adicionar ações a um carteira, algo como isso:

Agora dentro da nossa classe de unit testes vamos criar um método que verifica se a nossa função está adicionando uma ação da maneira correta. Uma boa prática na hora de escrever o métodos de teste é seguir o seguinte fluxo:

Given → Dado a estás condições;

When → Quando está ação ocorrer;

Then → Esperamos este resultado.

Este exemplo define uma subclasse de XCTesteCase, PortfolioTests, com um único método de testes implementado, testBooking(). O método de teste, cria uma nova instância das classes Portfolio e Stock e verifica se o após o método de Portfólio, book(stock: Stock), ser chamado a propriedade de funds é igual ao funds inicialmente instanciado menos a propriedade de value.

Algo importante a se colocar é que o método setup() é destinado a instanciar o estado inicial do aplicativo, caso seu teste necessite.

Unit test, a uma primeira vista, pode parecer um tópico áspero e complexo, que envolve a necessidade de aprendizado de conteúdos considerados "avançados". Mas como acabamos de ver, isto nem sempre é uma realidade e é possível escrever testes simples, que são capazes de testar grande parte da nossa aplicação sem a necessidade de uso de técnicas mais rebuscadas. E que com toda a certeza ja impactam positivamente, tanto a aplicação, quanto o processo de desenvolvimento.

Para onde ir agora?

Agora é fundamental aplicar e se aprofundar nestes conceitos. Uma boa prática é tentar implementar testes em apps já existentes. Comece com métodos mais simples, para se habituar com a estrutura e depois para lógicas mais complexas.

--

--