En cas de modifications majeures du code (nouvel ensemble de POJO, refactoring majeur d’applications, etc.), les tests unitaires ont tendance à faire l’objet d’un commentaire plutôt qu’à être retravaillés.
J'essaie toujours de garder le refactoring et le changement de fonctionnalité séparés. Lorsque j'ai besoin de faire les deux, je commets généralement le refactoring en premier.
Lors du refactoring de code sans changer de fonctionnalité, les tests unitaires existants sont supposés aider à garantir que le refactoring ne rompt pas accidentellement la fonctionnalité. Donc, pour un tel commit, je considérerais que la désactivation ou la suppression des tests unitaires est un signe d’avertissement majeur. Tous les développeurs qui le font devraient être avisés de ne pas le faire lors de la révision du code.
Il est possible que des modifications qui ne modifient pas les fonctionnalités entraînent toujours l'échec des tests unitaires en raison de tests unitaires erronés. Si vous comprenez le code que vous modifiez, la cause de ces échecs de tests unitaires est généralement évidente et facile à corriger.
Par exemple, si une fonction prend trois arguments, un test unitaire couvrant l'interaction entre les deux premiers arguments de la fonction n'aurait peut-être pas pris soin de fournir une valeur valide pour le troisième argument. Cette faille dans le test unitaire peut être révélée par une refactorisation du code testé, mais elle est facile à corriger si vous comprenez ce que le code est censé faire et ce que le test unitaire teste.
Lors du changement de fonctionnalités existantes, il sera généralement nécessaire de modifier également certains tests unitaires. Dans ce cas, les tests unitaires permettent de s’assurer que votre code modifie la fonctionnalité comme prévu et n’a pas d’effets secondaires indésirables.
Lorsque vous corrigez des bogues ou ajoutez de nouvelles fonctionnalités, vous devez généralement ajouter plusieurs tests unitaires. Pour ceux-ci, il peut être utile de valider d’abord les tests unitaires, puis le correctif ou la nouvelle fonctionnalité plus tard. Cela permet de vérifier plus facilement que les nouveaux tests unitaires n’ont pas réussi avec l’ancien code, mais qu’ils ont réussi avec le nouveau code. Cette approche n’est cependant pas entièrement dépourvue d’inconvénients, de sorte qu’il existe également des arguments en faveur de la validation simultanée de nouveaux tests unitaires et de mises à jour du code.
Le temps est mieux dépensé sur les tests d'intégration couvrant les cas d'utilisation, ce qui rend les tests de moindre envergure moins importants / pas du tout importants.
Il y a un élément de vérité à cela. Si vous pouvez obtenir une couverture des couches inférieures de la pile de logiciels avec des tests ciblant les couches les plus hautes de la pile de logiciels, vos tests peuvent être plus utiles lors du refactoring de code.
Je ne pense pas que vous trouverez un accord sur la distinction exacte entre un test unitaire et un test d'intégration. Et je ne m'inquiéterais pas si vous aviez un scénario de test dans lequel un développeur appelle un test unitaire et un autre, un test d'intégration, dans la mesure où ils peuvent convenir qu'il s'agit d'un scénario de test utile.