J'ai une classe de base avec une bonne quantité de "méta programmation" pour lui donner la flexibilité / abstraction dont elle a besoin pour être plutôt générique.
J'ai beaucoup de sous-classes utilisant les méthodes communes dans la classe de base, et j'ai des tests unitaires axés sur le comportement couvrant tous les cas dans chaque sous-classe.
Est-il correct de sauter le test de la classe de base?
unit-testing
testing
Nathan
la source
la source
Réponses:
Pour vérifier si vous avez suffisamment de tests ou non, vous pouvez vérifier votre couverture de code et votre couverture de branche induite par les tests (peut-être en utilisant un outil de couverture, peut-être manuellement en examinant les chemins de code ou en utilisant un débogueur).
Si vous arrivez à la conclusion que les tests pour les sous-classes vous offrent une couverture suffisamment élevée pour le code de vos classes de base, l'ajout de tests supplémentaires ne vous apportera évidemment pas beaucoup d'avantages. D'un autre côté, s'il existe des chemins de code que vous ne pouvez tester qu'en ajoutant directement des tests spécifiques en utilisant la classe de base, vous devez suivre cette voie.
Une autre raison possible pour "tester directement votre classe de base" est que vous souhaitez tester une fonction spécifique de cette classe "de manière isolée". Parfois, il peut être plus facile de concevoir des cas de test directement pour une méthode spécifique, au lieu de tester uniquement cette méthode indirectement en appelant les méthodes de vos sous-classes qui utilisent cette méthode.
Notez que lorsque vous avez une classe de base générique pour laquelle le scénario d'utilisation typique consiste à dériver une sous-classe, votre classe de base est probablement abstraite. Donc, pour tester une telle classe, vous devez quand même faire une dérivation. Pour cette situation, tester "la classe de base directement" pourrait bien sûr signifier ajouter une dérivation spéciale uniquement à des fins de test.
la source
Nous avons des tests pour nous rendre plus productifs et réduire le nombre de «problèmes» dont se plaignent les clients.
Donc, étant donné que vous disposez de tests unitaires axés sur le comportement couvrant tous les cas dans chaque sous-classe, il n'y a aucun avantage pour le client à tester également la classe de base directement. Cela peut être confirmé en changeant du code dans la classe de base et en voyant si un test échoue, par exemple en commun une ligne de code, ou en ajoutant un «pas» à une «instruction if». (Vérifier simplement que chaque ligne de code est couverte par les tests n'est pas suffisant.)
Il nous reste alors à vous demander si le test vous rendrait plus productif . Cela peut se produire de plusieurs manières.
Donc, étant donné que les sous-classes fonctionnent, je ne vois aucun intérêt à écrire des tests directs pour la classe de base. Ce n'est pas aujourd'hui, qu'il n'y aurait pas eu d'avantages à écrire ces tests à un stade précoce.
la source