seabeck.pages.dev

Como testar função de validação com casos extremos?

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.

Pré-requisitos

Definindo casos extremos

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

Estruturando testes unitários

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()

Executando testes automatizados

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

Exemplo Prático

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

Documentando resultados

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)}")

Conclusão

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.