Puis-je vérifier l'existence d'une annotation dans un test unitaire?

9

J'ai une hiérarchie de classe java qui est formée par une classe abstraite et N extensions de celle-ci. Dans la classe abstraite, j'ai une méthode qui est annotée avec une annotation @Remove. Bien que nous n'obtenions aucune exception de ne pas échouer rapidement si cette annotation est supprimée, nous pouvons obtenir des exceptions de mémoire, donc je voudrais être sûr que nous remarquons aussi vite que possible si cette annotation disparaît dans certains refactoring.

J'essaie de créer des GUTS (bons tests unitaires), donc j'ai pensé pouvoir documenter cette "exigence technique" dans mes tests, avec un cas de test qui l'indique.

Mais ce n'est pas une fonctionnalité, c'est un détail d'implémentation et ce n'est pas lié au comportement de la méthode (la méthode peut être vide, mais elle doit exister et doit être annotée).

Est-il possible de créer un test pour cela ou existe-t-il un autre moyen de vérifier l'existence de cette annotation?

JSBach
la source
1
Demandez-vous comment le faire, ou si le faire est une bonne pratique en génie logiciel? La réponse à ce dernier est oui. Les tests vérifient la qualité de votre base de code; ils ne vérifient pas nécessairement le comportement actuel . C'est parfaitement bien d'avoir des tests qui vérifient les conditions destinées à favoriser un bon comportement futur .
Kilian Foth du

Réponses:

5

Oui, créez un test unitaire. Vous dites que si l'annotation est supprimée, vous pouvez sortir des bogues de mémoire en production. Ce serait un bug mortel. Laisser cela se produire en raison de l'idée que les tests devraient être en quelque sorte limités est contre-productif. Les tests doivent vérifier l'exactitude dans tous les sens. Plus tôt vous détecterez le problème possible, mieux ce sera d'avoir un test unitaire et d'échouer la construction du CI est le moyen solide pour éviter le bogue. Essayer d'inventer un autre mécanisme pour empêcher l'introduction d'un tel bug ne semble pas valoir la peine. Chaque nouveau développeur devra recevoir une explication sur la façon de gérer le «cas spécial» des tests de non-validité fonctionnelle. Ce n'est probablement pas une bonne utilisation du temps du développeur.

Modifier Les équipes qui réalisent BDD sont susceptibles de séparer le test fonctionnel de l'entreprise des tests techniques tels que les tests de performances. Les équipes ont généralement différents types de tests, y compris des tests d'intégration qui sont exécutés moins fréquemment que leurs tests de logique métier de base. Cela se fait généralement avec des profils de génération afin que les développeurs de leur flux puissent exécuter fréquemment des tests de logique métier rapides et des tests d'intégration plus lents avant de valider le code. La construction CI exécutera tous les tests.

simbo1905
la source
2

Lorsqu'une fonction critique est implémentée à l'aide d'une technique déclarative comme celle-ci, j'ai tendance à préférer utiliser un test d'intégration qui inclut la partie du cadre qui reconnaît la déclaration. Cela vous protège des changements dans le comportement des frameworks, des malentendus sur l'effet de la déclaration, etc. Le simple fait de tester la présence de l'annotation ne garantit aucun comportement spécifique.

Jules
la source
Salut! C'est intéressant, comment vérifieriez-vous le comportement de l'annotation @remove, par exemple?
JSBach
Malheureusement, je ne connais pas assez bien les EJB pour répondre à cela - j'ai tendance à éviter de travailler avec la technologie précisément parce que j'ai du mal à écrire de bons tests pour.
Jules
L'idée de cette annotation est qu'elle indique au conteneur que le bean peut être supprimé. Il est malheureusement difficile de tester ce comportement :(
JSBach