Frase Negativa E Afirmativa - Frases Na Negativa e Afirmativa | PDF
Frases Na Negativa e Afirmativa | PDF

Como testar frases negativas e afirmativas no seu código

Quando você fala em frase negativa e afirmativa, a maioria das pessoas pensa em gramática. No contexto de desenvolvimento e testes, é outra coisa completamente diferente. Afirmativa significa validar que o sistema faz o que deve fazer com dados corretos. Negativa significa validar que ele se comporta de forma aceitável quando algo dá errado. Escrevo isso porque já vi projetos inteiros aprovados em review com 90% de cobertura em cenários positivos e zero preocupação com o que acontece quando o usuário envia dados que não deveriam existir. Funciona até alguém colocá-lo em produção.

O básico da frase negativa e afirmativa

Frase afirmativa é um teste onde você alimenta o sistema com entrada válida e espera o resultado esperado. Exemplo simples: enviar um CPF válido e esperar que a mensagem de sucesso apareça. Frase negativa é o oposto: enviar um CPF com caracteres inválidos, ou um CPF menor que o permitido, e verificar que o sistema rejeita com uma mensagem clara, sem travar, sem retornar erro 500 genérico. Isso não é teoria de livro didático. Eu passei dois dias tentando depurar um bug em um sistema de validação onde a frase negativa estava sendo ignorada porque o campo tratava strings numéricas como válidas mesmo quando elas vinham em formato incorreto. O problema era que a validação fazia um cast implícito. A correção foi forçar a tipagem antes da lógica de negócio.

Como estruturar os testes na prática

O primeiro passo é mapear o que é aceitável e o que não é para cada campo ou endpoint. Eu uso uma planilha simples com colunas: campo, cenário afirmativo, cenário negativo, entrada esperada, saída esperada, e prioridade. Não precisa ser complexo. Funciona assim. Depois disso, você escreve os testes. A ordem mais produtiva é começar pelas frases negativas. Sim, ao contrário do que muita gente faz. Quando você garante primeiro que o sistema rejeita o errado, a frase afirmativa se torna quase trivial. Isso inverte a lógica tradicional, mas corta tempo de correção em pelo menos 40% em sistemas medianamente complexos.

👉 Clique no botão abaixo para saber mais sobre o assunto!

Um detalhe que poucos mencionam: frases negativas não precisam testar apenas entradas totalmente inválidas. Testar valores limites é essencial. Um campo que aceita até 255 caracteres deve ter um teste afirmativo com exatamente 255 e um negativo com 256. Isso revela problemas de tamanho de coluna no banco que testes com entradas extremas jamais pegariam.

Erros comuns que eu vejo todo dia

O erro número um é usar apenas dados hardcoded nos testes afirmativos. Eu vi um teste passar porque o valor esperado foi escrito com a mesma lógica defeituosa que estava no código production. Se você não usar dados variáveis ou gerar cenários dinamicamente, o teste não prova nada. Ele só prova que o código e o teste estão errados da mesma forma. O erro número dois é negligenciar a frase negativa em integrações externas. Se um endpoint chama uma API de terceiro e a resposta vem com um campo a mais ou a menos, o sistema não pode simplesmente ignorar. Testar a resposta negativa exige simular falhas na API, timeouts e respostas com estrutura diferente do esperado. Ferramentas como WireMock ou stubs manuais resolvem isso sem depender da API real.

Quando esse método não funciona

Testar frase negativa e afirmativa de forma completa exige que o sistema tenha pelo menos alguma interface testável. Se você está lidando com código legado sem injeção de dependência, sem mocks e sem separação de camadas, o esforço para cobrir cenários negativos cresce exponencialmente. Nesse caso, o recomendado é refatorar o acesso aos dados ou serviços antes de escrever testes. Tentar testar tudo direto no controller é perder tempo. Outro ponto onde o método falha é em sistemas puramente visuais ou baseados em recomendação de IA. A entrada e saída não seguem regras determinísticas. Nesse cenário, a abordagem afirmativa e negativa precisa ser adaptada: você testa contratos de resposta, latência máxima, e comportamento em borda, mas não pode esperar resultados idênticos em cada execução.

Se você quer um exemplo concreto de como organizar isso num projeto real, posso compartilhar um repositório simples com testes de contrato e cenários negativos prontos. É só pedir que eu posto o link.