J'ai tendance à me ranger du côté de vos collègues, mais seulement jusqu'à un certain point.
Le problème avec les tests unitaires est qu'ils sont fréquemment et inconsidérément écrits sur des cas triviaux où une enquête rapide du code révèle qu'il fonctionnera quoi qu'il arrive. Par exemple:
def add(x, y)
x + y
end
Avec une douzaine de tests pour s'assurer que l'addition fonctionnera bien pour des cas d'utilisation choisis arbitrairement. Duh ...
La prémisse générale derrière les tests unitaires est la suivante: si votre code ne contient aucun bogue, c'est parce que vous n'avez pas suffisamment testé. Maintenant, quand écrire des tests unitaires appropriés. Réponses:
- Lorsque vous testez
- Lorsque vous déboguez
- Alors que vous développez des choses vraiment délicates
Passons en revue chacun, en supposant que vous développez une sorte d'application web.
Vous écrivez du code pour de nouvelles fonctionnalités, et cela devrait fonctionner raisonnablement bien maintenant. Vous recherchez ensuite votre navigateur et vérifiez qu'il fonctionne en effectuant des tests plus intensifs, non? Bzzzt! ... Mauvaise réponse. Vous écrivez un test unitaire. Si vous ne le faites pas maintenant, vous ne le ferez probablement jamais. Et c'est l'un des endroits où les tests unitaires fonctionnent très bien: pour tester des fonctionnalités de haut niveau.
Vous découvrez alors un bug (qui n'en manque jamais?). Cela nous amène au deuxième point. Vous replongez dans le code et commencez à suivre les étapes. Comme vous le faites, écrivez les tests unitaires aux points d'arrêt clés où il est crucial d'avoir des données cohérentes et correctes.
Le dernier point est l'inverse. Vous concevez des fonctionnalités velues qui impliquent des charges de méta-programmation. Il génère rapidement un arbre de décision avec des milliers de scénarios potentiels, et vous devez vous assurer que chacun d'entre eux fonctionne. Lors de l'écriture de telles choses, un simple changement ici ou là peut avoir des conséquences inimaginables plus bas dans la chaîne alimentaire. Supposons que vous concevez une implémentation MPTT à l'aide de déclencheurs SQL - afin qu'elle puisse fonctionner avec des instructions à plusieurs lignes.
Dans ce type d'environnement épineux, vous souhaiterez généralement automatiser fortement vos tests. Vous écrivez donc des scripts pour automatiser la génération de données de test et exécutez une charge de tests unitaires sur ces données de test. Une chose cruciale à ne pas perdre de vue pendant que vous faites cela, c'est que vous devez également écrire des tests unitaires pour votre générateur de tests unitaires.
Conclusion: des tests unitaires, certainement oui. Mais épargnez-vous celles sur les fonctionnalités de base - jusqu'à ce que vous en ayez réellement besoin pour le débogage, ou pour vous assurer que certaines fonctionnalités velues fonctionnent correctement (y compris, dans ce dernier cas, les tests eux-mêmes).