Testes Unitários em Python com unittest e pytest
Neste artigo, vamos explorar os testes unitários em Python, abordando tanto o módulo nativo unittest quanto a biblioteca popular pytest.
🔹 1. O que são testes unitários?
Testes unitários são scripts que verificam se pequenas partes do seu código (geralmente funções ou métodos) estão funcionando corretamente.
Exemplo prático:
Função para somar números → precisa ser testada com valores positivos, negativos, zero.
Função para dividir → precisa ser testada para divisão por zero.
Isso garante que, mesmo após alterações no código, a funcionalidade permaneça correta.
🔹 2. Criando um exemplo simples de função
Vamos criar um arquivo calculadora.py com algumas funções que usaremos nos testes:
# calculadora.py
def somar(a, b):
return a + b
def subtrair(a, b):
return a - b
def multiplicar(a, b):
return a * b
def dividir(a, b):
if b == 0:
raise ValueError("Divisão por zero não é permitida")
return a / b
🔹 3. Testando com unittest
O Python já vem com o módulo unittest integrado, inspirado no JUnit (Java).
Crie o arquivo test_calculadora_unittest.py:
import unittest
from calculadora import somar, subtrair, multiplicar, dividir
class TestCalculadora(unittest.TestCase):
def test_somar(self):
self.assertEqual(somar(2, 3), 5)
self.assertEqual(somar(-1, 1), 0)
def test_subtrair(self):
self.assertEqual(subtrair(10, 5), 5)
self.assertEqual(subtrair(0, 3), -3)
def test_multiplicar(self):
self.assertEqual(multiplicar(4, 5), 20)
self.assertEqual(multiplicar(0, 5), 0)
def test_dividir(self):
self.assertEqual(dividir(10, 2), 5)
with self.assertRaises(ValueError): # espera erro
dividir(10, 0)
if __name__ == "__main__":
unittest.main()
Executando os testes:
No terminal, rode:
python -m unittest test_calculadora_unittest.py
Saída esperada:
....
----------------------------------------------------------------------
Ran 4 tests in 0.001s
OK
✅ Quatro testes rodaram sem falhas.
🔹 4. Testando com pytest
O pytest é uma biblioteca mais moderna e simples de usar que o unittest.
Instalação:
pip install pytest
Crie o arquivo test_calculadora_pytest.py:
import pytest
from calculadora import somar, subtrair, multiplicar, dividir
def test_somar():
assert somar(2, 3) == 5
assert somar(-1, 1) == 0
def test_subtrair():
assert subtrair(10, 5) == 5
assert subtrair(0, 3) == -3
def test_multiplicar():
assert multiplicar(4, 5) == 20
assert multiplicar(0, 5) == 0
def test_dividir():
assert dividir(10, 2) == 5
with pytest.raises(ValueError):
dividir(10, 0)
Executando os testes:
pytest -v
Saída esperada:
============================= test session starts =============================
collected 4 items
test_calculadora_pytest.py::test_somar PASSED [ 25%]
test_calculadora_pytest.py::test_subtrair PASSED [ 50%]
test_calculadora_pytest.py::test_multiplicar PASSED [ 75%]
test_calculadora_pytest.py::test_dividir PASSED [100%]
🔹 5. Diferenças entre unittest e pytest
| Recurso | unittest (nativo) | pytest (externo) |
|---|---|---|
| Instalação | Já vem com Python | pip install pytest |
| Sintaxe | Verbosa (classes, métodos) | Simples (funções, asserts) |
| Parametrização de testes | Mais complexa | Fácil com @pytest.mark.parametrize |
| Integração com plugins | Limitada | Muitos plugins disponíveis |
👉 Resumindo:
unittest é útil se você quer zero dependências externas.
pytest é mais prático, poderoso e usado no mercado.
🔹 6. Testes Parametrizados com pytest
Uma das vantagens do pytest é a facilidade em testar múltiplos cenários:
import pytest
from calculadora import somar
@pytest.mark.parametrize("a, b, esperado", [
(2, 3, 5),
(10, -5, 5),
(0, 0, 0)
])
def test_somar_parametrizado(a, b, esperado):
assert somar(a, b) == esperado
Aqui, três cenários diferentes são testados automaticamente.
🔹 7. Boas práticas em testes unitários
✔️ Nomeie arquivos de teste como test_nomearquivo.py.
✔️ Use nomes descritivos para funções de teste.
✔️ Cada teste deve ser independente.
✔️ Escreva testes para casos comuns e casos de erro.
✔️ Execute os testes frequentemente durante o desenvolvimento.
🔹 8. Conclusão
Os testes unitários em Python são fundamentais para garantir que seu código funcione corretamente e se mantenha estável com o tempo.
Com
unittest, você tem uma solução robusta já embutida no Python.Com
pytest, você ganha simplicidade, legibilidade e recursos extras.
👉 Minha sugestão: comece com pytest, pois ele é amplamente adotado no mercado e torna os testes mais fáceis de escrever e manter.

Comentários
Postar um comentário