Absolument. Certaines personnes disent "n'importe quel test vaut mieux que pas de test du tout". Je suis tout à fait en désaccord - des tests mal écrits réduisent votre temps de développement, et vous finissez par perdre des jours à réparer des tests «cassés» car ils ne sont pas de bons tests unitaires. Pour moi en ce moment, les deux choses sur lesquelles je me concentre pour rendre mes tests utiles, plutôt que comme un fardeau, sont:
Maintenabilité
Vous devriez tester le résultat ( ce qui se passe), pas la méthode ( comment cela se produit). Votre configuration pour le test doit être aussi découplée que possible de la mise en œuvre: configurez uniquement les résultats pour les appels de service, etc., qui sont absolument nécessaires.
- Utilisez un cadre moqueur pour vous assurer que vos tests ne dépendent d'aucun facteur externe
- Privilégiez les moignons (si votre cadre les distingue) autant que possible
- Aucune logique dans les tests! Les ifs, les switchs, les for-onees, les cases, les try-catch, etc.
Lisibilité
Vous pouvez autoriser un peu plus de répétition dans vos tests, ce que vous ne pouvez normalement pas autoriser dans votre code de production, si cela les rend plus lisibles. Juste équilibrer cela avec les choses de maintenabilité ci-dessus. Soyez explicite dans ce que le test fait!
- Essayez de conserver un style "arrangez-vous, agissez, affirmez" pour vos tests. Cela sépare votre configuration et vos attentes du scénario, de l'action en cours d'exécution et du résultat affirmé.
- Conservez une assertion logique par test (si le nom de votre test contient "et", vous devrez peut-être le scinder en plusieurs tests).
En conclusion, vous devriez être très préoccupé par les tests "malodorants" - ils peuvent ne constituer qu'une perte de temps, sans valeur.
Vous avez dit:
Les tests unitaires requièrent généralement diverses "manipulations malodorantes", telles que les fonctions de substitution.
Il semblerait que vous ayez le droit de lire certaines techniques de tests unitaires, telles que l’utilisation d’un framework Mocking, pour vous rendre la vie beaucoup plus facile. Je recommanderais très fortement The Art of Unit Testing , qui couvre ce qui précède et bien plus encore. J'ai trouvé cela enrichissant après avoir lutté pendant longtemps avec des tests mal écrits, impossibles à maintenir, "malodorants". C'est l'un des meilleurs investissements en termes de temps que j'ai faits cette année!