Sans plus d'informations, il est difficile de déterminer la raison pour laquelle vous souffrez de ces problèmes. Parfois, il est inévitable que le changement d'interface, etc. casse beaucoup de choses, d'autres fois, c'est dû à des problèmes de conception.
Il est bon d'essayer de catégoriser les échecs que vous constatez. Quel genre de problèmes rencontrez-vous ? Par exemple, s'agit-il de la maintenance des tests (comme les faire compiler après les avoir refactorisés !) due aux changements d'API, ou est-ce dû au changement de comportement de l'API ? Si vous pouvez voir un modèle, alors vous pouvez essayer de changer la conception du code de production, ou mieux isoler les tests des changements.
Si le fait de changer une poignée de choses provoque des ravages incalculables dans votre suite de tests à de nombreux endroits, il y a plusieurs choses que vous pouvez faire (la plupart d'entre elles ne sont que des astuces courantes pour les tests unitaires) :
-
Développer de petites unités de code et les tester de petites unités de code. Extrayez des interfaces ou des classes de base lorsqu'il cela a du sens, de sorte que les unités de code aient des " coutures ". Le plus dépendances que vous devez intégrer (ou pire, instancier à l'intérieur de la classe en utilisant 'new'), plus vous êtes exposé à la votre code sera exposé au changement. Si chaque unité de code a une poignée de dépendances (parfois quelques unes ou pas du tout), elle est mieux isolée du changement.
-
N'affirmez jamais que ce que le test besoin. Ne faites pas d'assertion sur des états intermédiaires, accessoires ou sans rapport. Concevez par contrat et testez par contrat (par ex. si vous testez une méthode de pop de pile, ne testez pas la propriété count après poussée -- cela devrait être dans un test séparé).
Je vois ce problème assez souvent, surtout si chaque test est une variante. Si l'un de ces l'état accessoire change, cela casse tout ce qui est asserté sur lui (que les assertions soient nécessaires ou pas).
-
Comme pour le code normal, utilisez des fabriques et des constructeurs. dans vos tests unitaires. Je l'ai appris quand une quarantaine de tests avaient besoin d'un appel de constructeur mis à jour après un changement d'API...
-
Tout aussi important, utilisez l'avant porte d'entrée. Vos tests doivent toujours utiliser l'état normal s'il est disponible. N'utilisez les tests basés sur l'interaction que lorsque c'est nécessaire (c'est-à-dire en l'absence d'état à vérifier).
Quoi qu'il en soit, l'essentiel est que j'essaierais de trouver pourquoi/où les tests sont interrompus et de partir de là. Faites de votre mieux pour vous isoler du changement.