Posso verificar a existência de uma anotação em um teste de unidade?


9

Eu tenho uma hierarquia de classes java que é formada por uma classe abstrata e N extensões dela. Na classe abstrata, eu tenho um método anotado com uma anotação @Remove. Embora não possamos obter exceções ou falhas com rapidez, se essa anotação for removida, podemos obter exceções de memória insuficiente, portanto, gostaria de ter certeza de que notamos o mais rápido possível se essa anotação desaparecer em alguma refatoração.

Estou tentando criar GUTS (bons testes de unidade), então pensei em documentar esse "requisito técnico" nos meus testes, com um caso de teste que o declare.

Mas isso não é um recurso, é um detalhe de implementação e não está vinculado ao comportamento do método (o método pode estar vazio, mas deve existir e deve ser anotado).

Tudo bem criar um teste para isso ou existe outra maneira de verificar a existência desta anotação?


11
Você está perguntando como fazê-lo ou se é uma boa prática de engenharia de software? A resposta para o último é sim. Os testes verificam a qualidade da sua base de código; eles não necessariamente verificam o comportamento atual . É perfeitamente bom ter testes que verifiquem condições destinadas a promover um bom comportamento futuro .
Kilian Foth

Respostas:


5

Sim, crie um teste de unidade. Você está dizendo que, se a anotação for removida, poderá ocorrer erros de memória na produção. Isso seria um inseto assassino. Deixar isso acontecer devido a alguma idéia de que os testes devam ser limitados de alguma forma é contraproducente. Os testes devem verificar a exatidão em todos os sentidos. Quanto mais cedo você detectar o possível problema, melhor ter um teste de unidade e falhar na criação do IC é a maneira sólida de evitar o erro. Tentar inventar outro mecanismo para impedir a introdução de um bug desse tipo não parece valer a pena. Todo novo desenvolvedor precisará receber uma explicação de como lidar com o "caso especial" de nenhum teste de correção funcional. Provavelmente, esse não é um bom uso do tempo do desenvolvedor.

Editar As equipes que executam o BDD provavelmente separarão o teste funcional dos negócios dos testes técnicos, como testes de desempenho. Normalmente, as equipes têm tipos diferentes de testes, incluindo testes de integração que são executados com menos frequência do que os testes de lógica de negócios principais. Isso geralmente é feito com perfis de construção, para que os desenvolvedores em seu fluxo possam executar testes rápidos de lógica de negócios com freqüência e testes de integração mais lentos antes de confirmar o código. A construção do IC executará todos os testes.


2

Quando uma função crítica é implementada usando uma técnica declarativa como essa, eu tendem a preferir usar um teste de integração que inclua a parte da estrutura que reconhece a declaração. Isso protege você contra alterações no comportamento das estruturas, mal-entendidos sobre o efeito da declaração e assim por diante. Simplesmente testar a presença da anotação não garante nenhum comportamento específico.


Oi! Isso é interessante, como você verificaria o comportamento da anotação @remove, por exemplo?
precisa

Infelizmente, eu não estou familiarizado o suficiente com o EJB para responder a isso - eu costumo evitar trabalhar com a tecnologia precisamente porque acho difícil escrever bons testes.
Jules

A idéia desta anotação é que ela informa ao contêiner que o bean pode ser removido. Infelizmente, é difícil testar este comportamento :(
JSBach 28/10
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.