Neste post do blog, você aprenderá:
-
O que é Teste Unitário e a Pirâmide de Testes?
-
Por que precisamos de Testes Unitários?
-
O que torna um bom teste unitário?
-
Como escrever Testes Unitários com PyTest (Conceitos básicos)?
-
Como simular dependências adequadamente em vários cenários?
1. Pré-requisito
Para seguir este tutorial, você precisará instalar
pytest
e
pytest-mock
. Forneço comandos para ambas as opções de instalação de bibliotecas Python: pip e poetry.
Se estiver usando pip para instalação (padrão):
python -m pip install pytest
python -m pip install pytest-mock
Se estiver usando poetry para instalação:
poetry add pytest
poetry add pytest-mock
2. O que é Teste Unitário e a Pirâmide de Testes?
Teste Unitário é um método de teste de software para testar a menor parte de código que pode ser isolada, ou seja, uma função (método).
O conceito da Pirâmide de Testes, como mostrado abaixo, foi introduzido por Mike Cohn em seu livro
Succeeding with Agile
. Define a estratégia de testes com uma ótima visualização, cobrindo os três principais tipos de testes: testes unitários, testes de integração e testes de ponta a ponta, e a proporção de cada um dentro de toda a estratégia de testes.
Segundo a pirâmide, quando está na parte inferior, normalmente significa testes mais isolados e rápidos (em outras palavras: mais baratos); enquanto subimos na pirâmide, significa testes mais integrados e lentos (em outras palavras: mais caros). No topo da pirâmide poderia significar testes manuais. Portanto, devemos cobrir o código com mais testes unitários automatizados e menos testes manuais.
Pirâmide de Testes
3. Por que precisamos de Testes Unitários?
As pessoas tendem a se apressar na entrega da funcionalidade solicitada, mas ignoram a importância de escrever casos de teste. A ignorância pode ser devido a verem isso como uma perda de tempo e não perceberem o dano que poderia causar. No entanto, deixe-me dizer os benefícios que você terá ao escrever testes unitários:
-
Identificar erros facilmente e cedo:
O teste unitário pode ajudá-lo a verificar o que deseja desenvolver. Sem testes unitários, você acabaria preso corrigindo erros aleatórios ao executar toda a aplicação. E pode precisar passar horas colocando pontos de interrupção e rastreando de onde vêm.
-
Ajudar a escrever um código melhor:
Se você achar difícil escrever um caso de teste para seu próprio código, provavelmente pensará em refatorar seu código.
-
Testes de baixo custo:
O teste unitário é o mais rápido entre todos os casos de teste, pois elimina todas as dependências.
-
Servir como documentação:
As pessoas entenderão que tipo de dados de entrada/saída, formato é quando olham seus testes unitários.
4. O que faz então um bom teste unitário?
Abaixo estão as seis qualidades que farão um bom teste unitário. Como podemos alcançar as quatro primeiras qualidades são abordadas nas seções seguintes.
Independente
O teste se concentra na função em si e
NÃO
em todas as dependências, que incluem chamadas de API, conexões a bancos de dados, outras funções de sua aplicação ou bibliotecas de terceiros. Todas as dependências devem ser adequadamente simuladas.
Múltiplas asserções são permitidas apenas se todas testarem uma característica. Quando um teste falha, deve apontar a localização do problema.
Os testes devem ser isolados --
não depender uns dos outros
. Não devemos fazer suposições sobre a ordem de execução dos testes.
Rápido
O tempo de resposta de um bom teste unitário deve ser inferior a um segundo. Esta também é uma forma boa e direta de avaliar sua independência. Qualquer teste unitário que leve mais tempo do que isso deve