15.12.2022 Views

Python Eficaz

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Item 56: Teste absolutamente tudo com unittest

O Python não tem verificação de tipos estáticos. Não há nada no compilador que

garanta o funcionamento de seu programa quando for executado. Com o Python

não sabemos se as funções que o programa chama serão definidas em tempo de

execução, mesmo que sua existência seja evidente no código-fonte. Esse

comportamento dinâmico é uma bênção e uma maldição.

O número astronômico de programadores de Python no mundo é justificado pela

produtividade que se ganha por sua concisão e simplicidade. Contudo, não é

pequeno o número de pessoas que já ouviram pelo menos uma história de choro

e ranger de dentes sobre o Python no qual um programa encontrou um erro

cretino durante a execução.

Um dos exemplos mais escabrosos que já encontrei foi quando uma exceção de

erro de sintaxe (SyntaxError) foi levantada em produção como efeito colateral de

uma importação dinâmica (consulte o Item 52: “Saiba como romper

dependências circulares”). Um programador meu conhecido que presenciou (e

teve que corrigir) essa ocorrência surpreendente jurou por todos os nomes

sagrados jamais usar Python novamente.

Eu, de minha parte, fiquei matutando: por que o código não foi testado antes de

o programa ser colocado em produção? Segurança de tipos não é tudo. É

obrigatório sempre testar o código, independente de qual linguagem ele é escrito.

Todavia, admito que a grande diferença entre o Python e muitas outras

linguagens é que a única maneira de confiar em um programa em Python é

escrevendo testes. Não há nenhum véu de verificação de tipos estáticos para que

nos sintamos seguros.

Felizmente, os mesmos recursos dinâmicos que impedem a verificação de tipos

no Python também facilitam grandemente escrever testes para verificar o código.

Podemos usar a natureza dinâmica do Python e seus comportamentos facilmente

substituíveis para implementar testes e garantir que os programas funcionem

como esperado.

Devemos pensar nos testes como uma apólice de seguros para o código. Bons

testes dão confiança de que o código está correto. Se refatorarmos ou

expandirmos o código, os testes facilitam a identificação de como os

comportamentos mudaram. Parece conversa fiada, mas não é: bons testes na

verdade facilitam modificar o código mais tarde, em vez de dificultar.

www.full-ebook.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!