Validar funções com casos extremos é essencial para garantir que seu código lide corretamente com entradas inesperadas ou limites de dados. Este método permite identificar falhas críticas antes que elas causem problemas em produção, economizando tempo e recursos.
Antes de escrever os testes, identifique os casos extremos relevantes para sua função. Isso inclui valores nulos, strings vazias, números muito grandes ou muito pequenos, tipos de dados incorretos e limites máximos/mínimos permitidos.
def validar_idade(idade):
if idade is None:
return False
if not isinstance(idade, int):
return False
if idade < 0 or idade > 150:
return False
return True
Use o módulo unittest do Python para criar testes organizados. Cada caso extremo deve ser testado individualmente para isolar falhas e facilitar a depuração.
import unittest
class TestValidarIdade(unittest.TestCase):
def test_idade_normal(self):
self.assertTrue(validar_idade(25))
def test_idade_zero(self):
self.assertTrue(validar_idade(0))
def test_idade_maxima(self):
self.assertTrue(validar_idade(150))
def test_idade_negativa(self):
self.assertFalse(validar_idade(-1))
def test_idade_acima_do_maximo(self):
self.assertFalse(validar_idade(151))
def test_valor_nulo(self):
self.assertFalse(validar_idade(None))
def test_string_vazia(self):
self.assertFalse(validar_idade(""))
def test_tipo_incorreto(self):
self.assertFalse(validar_idade("vinte"))
if __name__ == '__main__':
unittest.main()
Execute seus testes regularmente para garantir que as validações continuem funcionando conforme o esperado, especialmente após modificações no código.
python -m unittest test_validacao.py
| Entrada | Tipo | Saída Esperada |
|---|---|---|
| 25 | Inteiro normal | True |
| 0 | Limite inferior | True |
| 150 | Limite superior | True |
| -5 | Negativo | False |
| 200 | Acima do limite | False |
| None | Nulo | False |
| "25" | String | False |
Mantenha um registro dos testes executados e seus resultados. Isso ajuda a identificar padrões de falha e a melhorar continuamente suas funções de validação.
def executar_testes():
suite = unittest.TestLoader().loadTestsFromTestCase(TestValidarIdade)
resultado = unittest.TextTestRunner(verbosity=2).run(suite)
print(f"Testes passaram: {resultado.wasSuccessful()}")
print(f"Total de testes: {resultado.testsRun}")
print(f"Falhas: {len(resultado.failures)}")
print(f"Erros: {len(resultado.errors)}")
Com este método estruturado, você garante que suas funções de validação sejam robustas e confiáveis, lidando adequadamente com todos os casos extremos possíveis. A automação dos testes permite identificar problemas rapidamente, mantendo a qualidade do seu código com mínimo esforço manual.