Hypothesis: Teste Generativo em Python

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução

Testes comuns verificam se uma função funciona com valores específicos. Mas e se você não souber de antemão quais dados de entrada podem causar um erro? O Hypothesis – teste generativo resolve esse problema automaticamente.

Hypothesis é uma poderosa biblioteca de property-based testing para Python que transforma a forma como você testa seu código. Em vez de criar manualmente dados de teste, ela gera automaticamente milhares de valores de entrada diferentes, buscando encontrar casos extremos, erros ou situações inesperadas. Em vez de escrever vários testes com valores específicos, você descreve as propriedades e invariantes da função, e o Hypothesis tenta quebrá-las.

O que é Hypothesis

Hypothesis é uma ferramenta de teste generativo baseada no conceito de property-based testing. Esta biblioteca foi criada para resolver um problema fundamental dos testes tradicionais: a impossibilidade de prever todos os possíveis dados de entrada.

Princípios básicos de funcionamento

A biblioteca funciona com o princípio de "encontrar um contraexemplo". Quando você define uma propriedade de uma função (por exemplo, que o resultado da soma de dois números é sempre maior que cada uma das parcelas), o Hypothesis gera vários conjuntos de dados de entrada e verifica se essa propriedade é válida para cada um deles.

Vantagens sobre os testes tradicionais

  • Cobertura automática de casos limite: O Hypothesis encontra automaticamente combinações de dados raras e complexas
  • Minimização de erros: Ao detectar uma falha, o teste é automaticamente simplificado até o menor exemplo possível
  • Alta performance: A geração de milhares de casos de teste é rápida e eficiente
  • Reprodutibilidade: Erros encontrados podem ser facilmente reproduzidos

Instalação e primeiros passos

Instalação da biblioteca

pip install hypothesis

Para funcionalidades adicionais, você pode instalar com extensões:

pip install hypothesis[numpy,pandas,django]

Exemplo básico de uso

from hypothesis import given
import hypothesis.strategies as st

@given(st.integers(), st.integers())
def test_addition_commutative(a, b):
    assert a + b == b + a

@given(st.integers(), st.integers())
def test_addition_associative(a, b, c):
    assert (a + b) + c == a + (b + c)

Executando os testes

Os testes podem ser executados com pytest, unittest ou diretamente:

pytest test_file.py
python -m unittest test_file.py
python test_file.py

Fundamentos da geração de dados

Decorador @given

O decorador @given() é o elemento central do Hypothesis. Ele define quais estratégias de geração serão usadas para criar os dados de teste.

@given(st.integers())
def test_absolute_value(x):
    assert abs(x) >= 0

@given(st.text(), st.integers(min_value=0))
def test_string_multiplication(s, n):
    result = s * n
    assert len(result) == len(s) * n

Módulo hypothesis.strategies

Todas as estratégias de geração de dados estão no módulo hypothesis.strategies, que geralmente é importado como st. Este módulo oferece um conjunto rico de estratégias predefinidas para vários tipos de dados.

Estratégias de geração de dados

Estratégias básicas

O Hypothesis fornece um conjunto abrangente de estratégias integradas para gerar diferentes tipos de dados:

# Tipos numéricos
st.integers()  # Números inteiros
st.floats()    # Números de ponto flutuante
st.decimals()  # Números decimais

# Dados textuais
st.text()      # Strings Unicode
st.binary()    # Strings de bytes
st.characters() # Caracteres individuais

# Lógicos                    

Recommendations