Item 39: Prefira as anotações aos padrões de nomenclatura

Item 39: Prefira as anotações aos padrões de nomenclatura

Problemas com Padrões de Nomenclatura:

Erros Tipográficos:

Falhas silenciosas por nomes incorretos (ex.: tsetSafetyOverride em vez de testSafetyOverride).

Uso Indevido:

Não há como garantir que nomes sejam usados apenas nos elementos certos (ex.: nomear uma classe como TestSafetyMechanisms).

Associação de Parâmetros:
Dificuldade em associar parâmetros aos elementos do programa (ex.: codificar tipos de exceção nos nomes dos métodos de teste).

Solução com Anotações:
Exemplo de Anotação: Criação de uma anotação Test para métodos de teste.

Meta-anotações:
– @Retention(RetentionPolicy.RUNTIME): Manter as anotações em tempo de execução.
– @Target(ElementType.METHOD): Anotação permitida apenas em métodos.

Uso Prático:

A anotação Test marca métodos estáticos sem parâmetros para testes automáticos que falham se lançarem exceções.
Exemplo: Classe Sample com métodos anotados como testes (alguns válidos, alguns inválidos).

Ferramenta de Teste Simples:

Teste Runner: Executa métodos anotados com Test reflexivamente.
Usa Method.invoke e isAnnotationPresent para detectar e executar métodos anotados.
Captura e relata exceções lançadas pelos métodos de teste.

Anotações com Parâmetros:

Teste com Exceções: Criação de uma anotação ExceptionTest para testes que passam se lançarem uma exceção específica.
Tipo de Parâmetro: Class<? extends Throwable> para especificar o tipo de exceção esperada.

Modificação do Teste Runner:

Adiciona suporte para ExceptionTest.
Verifica se a exceção lançada é do tipo correto.

Anotações Repetíveis:

Uso de Arrays:
Mudança do parâmetro de ExceptionTest para um array de Class.

Anotações @Repeatable:
Permite anotar o mesmo elemento várias vezes com a mesma anotação.
Exemplo: @Repeatable na anotação ExceptionTest.

Processamento de Anotações Repetíveis:

Cuidado no Processamento:
Uso de getAnnotationsByType para acessar anotações repetidas e não repetidas.
Verificação de ambos os tipos de anotação (individual e contêiner).

Conclusão:
Vantagens das Anotações:

Superioridade das anotações sobre os padrões de nomenclatura para fornecer informações adicionais ao código-fonte.
Incentivo ao uso de anotações predefinidas e fornecidas por ferramentas.

Importância das Anotações:
Para Programadores:

Programadores devem utilizar anotações predefinidas e fornecidas por IDEs ou ferramentas de análise estática para melhorar a qualidade das informações de diagnóstico.
Este resumo destaca os principais pontos discutidos no trecho sobre a evolução do uso de anotações para substituir os padrões de nomenclatura tradicionais, abordando suas vantagens e fornecendo exemplos práticos e sugestões de implementação.