Disons que j'ai une méthode comme celle-ci:
public void OrderNewWidget(Widget widget)
{
if ((widget.PartNumber > 0) && (widget.PartAvailable))
{
WigdetOrderingService.OrderNewWidgetAsync(widget.PartNumber);
}
}
J'ai plusieurs de ces méthodes dans mon code (la moitié avant d'un appel de service Web asynchrone).
Je me demande s'il est utile de les couvrir de tests unitaires. Oui, il y a de la logique ici, mais ce n'est qu'une logique de garde. (Cela signifie que je m'assure d'avoir les éléments dont j'ai besoin avant d'autoriser l'appel du service Web.)
Une partie de moi dit "bien sûr que vous pouvez les tester à l'unité, mais cela ne vaut pas le temps" (je suis sur un projet qui est déjà en retard).
Mais l'autre côté de moi dit, si vous ne les testez pas à l'unité et que quelqu'un change les gardes, alors il pourrait y avoir des problèmes.
Mais la première partie de moi dit en retour, si quelqu'un change les gardes, alors vous faites juste plus de travail pour eux (car maintenant ils doivent changer les gardes et les tests unitaires pour les gardes).
Par exemple, si mon service assume la responsabilité de vérifier la disponibilité des widgets, je ne veux plus de ce gardien. S'il est sous test unitaire, je dois changer deux endroits maintenant.
Je vois les avantages et les inconvénients dans les deux sens. J'ai donc pensé demander ce que les autres avaient fait.
la source
but it is not worth the time" (I am on a project that is already behind schedule).
Nous sommes des développeurs de logiciels. La seule fois où nous sommes dans les délais, c'est quand nous sommes morts :)Réponses:
Ce sont trois tests très courts. Vous avez passé autant de temps à vous poser la question.
Écoutez ce côté.
Si votre responsable est un écrou TDD, vous lui rendez la tâche plus difficile. Tout changement que je fais sans qu'il y ait de changement ou d'ajout de tests m'amène à y réfléchir sérieusement. En fait, j'ajouterais probablement les tests avant d'aller de l'avant et de faire le changement.
La première partie de vous est tout simplement fausse. Donnez une tape dans le dos à la deuxième partie et arrêtez d'y penser.
la source
Cela simplifierait les tests unitaires si la logique de garde et l'ordre réel étaient des méthodes distinctes.
En
Widget
classeou une méthode équivalente ailleurs
La méthode de commande
Maintenant, les tests sont
IsWidgetReadyForOrdering
devenus faciles. N'y pensez plus longtemps. Essaye-le!la source
OrderNewWidget
est probablement dans une autre classe queWidget
, car elle a unWidget
argument. Étant donné que la méthode n'a pas de valeur de retour, le tester n'est pas évident. Vous devez injecter unWigdetOrderingService
-mock qui suit l'OrderNewWidgetAsync
appel.Si vous n'avez pas de temps dans votre calendrier pour les tests unitaires mais que vous avez du temps de côté pour une utilisation solide de l'AQ, demandez si vous pouvez voler une partie de ce temps d'AQ pour écrire des tests unitaires, ou si vous pouvez passer une partie de la période d'AQ faire des tests unitaires, ou peut-être simplement traiter du code non testé unitaire .. Malheureusement, les horaires qui sont immuables vous obligent à faire des concessions ou à travailler vous-même à mort, je suggère généralement la première option car la deuxième vous rendra incapable de supporter / maintenir le système correctement pendant sa durée.
Cela dit, à votre question générale de tester les déclarations des gardes; Oui! Testez absolument les déclarations des gardes! Ce sont des parties importantes du comportement de cette méthode, vous ne voudriez pas découvrir que quelqu'un a mal compris quelque chose en corrigeant un bug et a supprimé vos gardes ou changé le
&&
en un le||
feriez-vous? Les tests unitaires permettront de s'assurer que a) vous avez réellement la logique de vos gardes correcte et b) personne ne casse cette logique plus tard sans se plaindre lorsqu'ils exécutent les tests unitaires en leur disant que cela devrait être le cas pour une raison quelconque.la source
Il y a d'excellentes réponses ci-dessus, et les points qu'elles soulèvent sont très importants. Mais celui qui semble avoir été oublié est que vous avez un ensemble complet de tests unitaires, ils se lisent comme une spécification extrêmement détaillée du code. Si vous omettez de tester la validation simplement parce que le code est si facile qu'il est difficile de voir comment cela pourrait mal tourner, une partie de vos spécifications est manquante. Si je faisais partie d'une équipe où ces tests avaient été manqués, je supposerais en fait que votre service ne validerait pas ses arguments.
la source
Le code est le code. Vous devriez essayer d'obtenir une couverture à 100% lors des tests. Si ce n'était pas important, ce ne serait pas là.
la source