Oui, vous devriez tester toute la chaîne d'événements en tant qu'unité. Ainsi, dans votre exemple avec une procédure qui s'insère dans une table et provoque l'activation de plusieurs déclencheurs, vous devez écrire des tests unitaires qui évaluent la procédure pour différentes entrées. Chaque test unitaire doit réussir ou échouer selon qu'il renvoie ou non les valeurs correctes, modifie correctement l'état des tables, crée le courrier électronique correct et envoie même les paquets réseau corrects s'il est conçu pour le faire. En bref, chaque effet de l’appareil doit être vérifié.
Vous avez raison de dire que la conception des tests unitaires demande du travail, mais que la majeure partie de ce travail doit être effectuée pour tester manuellement l'unité. Vous ne faites que sauvegarder le travail nécessaire pour tester l'unité. peut être tout aussi complet et beaucoup plus facile.
Changer les données rend les tests plus difficiles, mais cela ne les rend pas moins importants et augmente réellement la valeur des tests unitaires, car la plupart des difficultés ne doivent être réfléchies qu’une seule fois, et non à chaque changement apporté à l’unité. Des ensembles de données enregistrés, des insertions / mises à jour / suppressions faisant partie de la configuration / du démontage et une opération à portée étroite peuvent tous être utilisés pour faciliter cette opération. Comme la question n'est pas spécifique à la base de données, les détails varieront.
Aucun seuil de complexité, haut ou bas, ne devrait vous empêcher d'effectuer des tests ou des tests unitaires. Considérez ces questions:
- Est-ce que vous écrivez toujours du code sans bug?
- Les petites unités sont-elles toujours exemptes de bogues?
- Est-ce correct pour une grosse unité d'avoir un bug?
- Combien de bugs faut-il pour provoquer une catastrophe?
Supposons que vous commenciez un nouveau travail et que vous soyez chargé de l’optimisation d’une petite fonction utilisée à de nombreux endroits. La totalité de l'application a été écrite et gérée par un employé dont personne ne se souvient même. Les unités ont une documentation décrivant le comportement attendu normal, mais guère plus. Lequel de ceux-ci préféreriez-vous trouver?
- Aucun test unitaire n’importe où dans l’application. Une fois la modification effectuée, vous pouvez effectuer des tests manuels sur l'unité afin de vous assurer qu'elle renvoie toujours les valeurs attendues dans la documentation. Vous pouvez ensuite passer à la production, croiser les doigts et espérer que cela fonctionne (après tout, vous écrivez toujours du code sans bogues et une optimisation dans une unité ne peut en affecter une autre) ou passez énormément de temps à apprendre comment toute l'application fonctionne de sorte que vous pouvez tester manuellement chaque unité effectuée directement ou indirectement.
- Tests unitaires dans l'application qui s'exécutent automatiquement quotidiennement ou à la demande Ils vérifient non seulement les valeurs d'entrée normales et leur réponse attendue, mais également les valeurs anormales et les exceptions attendues qui sont déclenchées. Vous effectuez votre modification et exécutez immédiatement la suite de tests d'unités pour l'application en sachant que trois autres unités ne renvoient plus les résultats attendus. Deux d'entre eux sont bénins, vous devez donc ajuster les tests unitaires pour en tenir compte. La troisième nécessite un autre léger ajustement et un nouveau petit test unitaire. Une fois les modifications apportées, l'ensemble de la suite de tests réussit et vous les déployez en toute confiance.