Teste de unidade em Python com pytest: um guia completo

Domine os testes unitários e TDD usando pytest

Aprenda a realizar testes de unidade de forma eficaz em Python usando pytest. Este guia abrangente cobre os fundamentos do pytest, exemplos do mundo real e práticas de desenvolvimento orientado a testes (TDD) para ajudá-lo a escrever código robusto e sustentável.

Programação
Autor
Afiliação
Data de Publicação

8 de fevereiro de 2024

Data de Modificação

29 de abril de 2025

Palavras-chave

Tutorial pytest, Teste de unidade em Python, Python TDD, Exemplos pytest, Desenvolvimento orientado a testes Python

Introdução

O teste de unidade é uma parte essencial da construção de software robusto e sustentável. Ao escrever testes para unidades individuais de código, você garante que suas funções se comportem conforme o esperado e pode detectar bugs no início do processo de desenvolvimento. Neste guia, apresentaremos o pytest, uma poderosa estrutura de testes para Python, e demonstraremos como escrever testes, adotar práticas de desenvolvimento orientado a testes (TDD) e incorporar exemplos reais ao seu fluxo de trabalho.



Por que testes unitários e TDD?

Os testes ajudam a detectar erros antecipadamente e dão a você a confiança necessária para refatorar o código sem quebrar a funcionalidade. O desenvolvimento orientado por testes (TDD) vai além, escrevendo testes antes do próprio código, orientando seu design e garantindo uma base de código robusta.

Introdução ao pytest

Instalando o pytest

Para começar, instale o pytest usando o pip:

pip install pytest

Escrevendo seu primeiro teste

Vamos criar uma função simples e escrever um teste para ela. Suponha que temos uma função add:

def add(a, b):
    return a + b

Agora, crie um teste para essa função:

def test_add():
    assert add(2, 3) == 5
    assert add(-1, 1) == 0

Para executar o teste, execute pytest no seu terminal.

Desenvolvimento orientado a testes (TDD) com pytest

O TDD envolve escrever testes antes de escrever o código. Aqui está um fluxo de trabalho simples:

  1. Escreva um teste que defina o comportamento desejado de uma função.
  2. Execute o teste para ver se ele falha.
  3. Escreva o código mínimo necessário para passar no teste.
  4. Refactorize o código, se necessário, e repita.

Exemplo: fluxo de trabalho TDD

Suponha que precisamos de uma função multiply que multiplica dois números. Começamos escrevendo um teste:

def test_multiply():
    assert multiply(3, 4) == 12
    assert multiply(-2, 5) == -10

Execute o pytest e você verá que o teste falhou porque multiply não está definido. Agora, implemente a função:

def multiply(a, b):
    return a * b

Execute o pytest novamente para garantir que o teste seja aprovado.

Recursos avançados do pytest

Testes parametrizados

O pytest permite que você execute uma função de teste com diferentes conjuntos de entradas usando o decorador @pytest.mark.parametrize.

#| label: parameterized-tests, code-fold: true
import pytest

@pytest.mark.parametrize("a,b,expected", [
    (2, 3, 6),
    (5, 5, 25),
    (-1, 8, -8),
])
def test_multiply_param(a, b, expected):
    assert multiply(a, b) == expected

Fixtures no pytest

Os fixtures em pytest permitem que você configure dados ou estados antes de executar testes e limpar depois.

import pytest

@pytest.fixture
def sample_data():
    return [1, 2, 3, 4, 5]

def test_sum(sample_data):
    assert sum(sample_data) == 15

Melhores práticas para testes unitários

  • Escreva testes para cada função:
    Certifique-se de que cada unidade do seu código tenha testes correspondentes.
  • Mantenha os testes independentes:
    Os testes não devem depender uns dos outros; cada teste deve configurar seu próprio contexto.
  • Use nomes descritivos para os testes:
    Nomeie claramente suas funções de teste para que as falhas sejam fáceis de diagnosticar.
  • Aproveite os fixtures e a parametrização:
    Use esses recursos para escrever testes mais limpos e eficientes.
  • Executar testes com frequência:
    Integre testes ao seu processo de desenvolvimento para detectar problemas antecipadamente.

Conclusão

Ao adotar o pytest e as práticas de TDD, você pode construir um conjunto de testes robusto que melhora a qualidade e a confiabilidade do código. Este guia apresentou os fundamentos da escrita de testes, criação de fixtures, parametrização de testes e seguimento de fluxos de trabalho TDD em Python. Com essas ferramentas, você estará mais bem equipado para manter e dimensionar seus projetos.

Leitura adicional

Bons testes e divirta-se criando aplicativos Python confiáveis com o pytest!

Explore mais artigos

Nota

Aqui estão mais artigos da mesma categoria para ajudá-lo a se aprofundar no tópico.

placeholder

placeholder
Nenhum item correspondente
De volta ao topo

Reuso

Citação

BibTeX
@online{kassambara2024,
  author = {Kassambara, Alboukadel},
  title = {Teste de unidade em Python com pytest: um guia completo},
  date = {2024-02-08},
  url = {https://www.datanovia.com/pt/learn/programming/python/tools/pytest-unit-testing.html},
  langid = {pt}
}
Por favor, cite este trabalho como:
Kassambara, Alboukadel. 2024. “Teste de unidade em Python com pytest: um guia completo.” February 8, 2024. https://www.datanovia.com/pt/learn/programming/python/tools/pytest-unit-testing.html.