J'aime beaucoup la réponse de @ RevBingo, car il suggère que la lutte à 100% peut vous amener à nettoyer ou à supprimer le code inutilisé. Ce que je n'ai pas vu dans les autres réponses, c'est une idée du moment où vous avez besoin d'une couverture élevée ou non. J'ai pris un coup de poignard pour commencer ceci. Je pense que l'ajout de détails à un tableau comme celui-ci serait une tâche plus utile que de trouver un numéro de couverture de test qui convient à tous les codes.
100%
Pour une API publique, telle que les Collections java.util, qui n'est pas couplée à une base de données et ne renvoie pas le code HTML, je pense qu'une couverture à 100% est un objectif de départ noble, même si vous vous contentez de 90 à 95% pour des raisons de temps ou autre. contraintes. L'augmentation de la couverture de test une fois que vous avez terminé la fonctionnalité oblige à un niveau de contrôle plus détaillé que d'autres types de révision de code. Si votre API est populaire, les gens l'utiliseront, la sous-classeront, la désérialiseront, etc. d'une manière inattendue. Vous ne voulez pas que leur première expérience soit de trouver un bogue, ou de superviser la conception!
90%
Pour le code d'infrastructure d'entreprise, qui prend en charge des structures de données et renvoie des structures de données, l'objectif de 100% reste probablement un bon objectif de départ, mais si ce code n'est pas suffisamment public pour inviter à une utilisation abusive excessive, peut-être que 85% est toujours acceptable?
75%
Pour le code qui récupère et renvoie Strings, je pense que le test unitaire est beaucoup plus fragile, mais peut toujours être utile dans de nombreuses situations.
50% ou moins
Je déteste écrire des tests pour des fonctions qui renvoient du HTML car il est si fragile. Et si quelqu'un change le CSS, le JavaScript ou tout le blob de HTML et d'anglais que vous renvoyez n'a aucun sens pour les utilisateurs finaux humains? Si vous pouvez trouver une fonction qui utilise beaucoup de logique métier pour produire un peu de HTML, cela peut valoir le coup d’être testé. Mais la situation inverse ne vaut peut-être pas la peine d'être testée.
Près de 0%
Pour certains codes, la définition de "correct" est "a un sens pour l'utilisateur final". Vous pouvez effectuer des tests non traditionnels sur ce code, tels que la vérification grammaticale automatisée ou la validation HTML de la sortie. J'ai même mis en place des instructions grep pour les petites incohérences dont nous sommes souvent la proie au travail, comme dire «Connexion» lorsque le reste du système l'appelle «Connexion». Cet homme ne doit pas être strictement un test unitaire, mais un moyen utile de détecter les problèmes sans attendre un résultat spécifique.
En fin de compte cependant, seul un humain peut juger de ce qui est sensible à l'homme. Les tests unitaires ne peuvent pas vous aider là-bas. Parfois, il faut plusieurs humains pour en juger avec précision.
0% absolu
C'est une catégorie triste et je me sens moins comme une personne pour l'écrire. Mais dans tout projet suffisamment important, il y a des terriers de lapin qui peuvent aspirer des semaines-personnes sans fournir d'avantages commerciaux.
J'ai acheté un livre car il prétendait montrer comment simuler automatiquement des données pour tester Hibernate. Mais il n’a testé que les requêtes Hibernate HQL et SQL. Si vous devez utiliser beaucoup de HQL et de SQL, vous n’obtenez pas vraiment l’avantage d’Hibernate. Il existe une forme de base de données Hibernate en mémoire, mais je n’ai pas investi le temps nécessaire pour comprendre comment l’utiliser efficacement lors des tests. Si cela fonctionnait, je souhaiterais bénéficier d’une couverture de test élevée (50% à 100%) pour toute logique d’entreprise qui calcule des données en naviguant sur un graphe d’objets, ce qui oblige Hibernate à exécuter certaines requêtes. Ma capacité à tester ce code est proche de 0% pour le moment et c'est un problème. J'améliore donc la couverture des tests dans d'autres domaines du projet et essaie de préférer les fonctions pures à celles qui accèdent à la base de données, principalement parce qu'il est plus facile d'écrire des tests pour ces fonctions. Encore,