Item 39: Prefira as anotações aos padrões de nomenclatura
Tags: java, javaefetivo
Published: 2024-07-04 18:55:06

**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.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/99r1613jq00a1kpgfdwp.jpg)

**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).

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aw1ujy4sf97o1l5fsfdq.jpg)

**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.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yqhx3ik98jjqxelun0ks.jpg)

**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.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8h34410xlqeeaekawseu.jpg)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0fzk2c8959189rzbzhp3.jpg)

**Modificação do Teste Runner:**
- Adiciona suporte para ExceptionTest.
- Verifica se a exceção lançada é do tipo correto.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t1cqem055l83oumap17f.jpg)

**Anotações Repetíveis:**
- Uso de Arrays:
- Mudança do parâmetro de ExceptionTest para um array de Class.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i5wpvd0bvp2yyouxu55e.jpg)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mz78p6tked98fcjhd68i.jpg)

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.