Que préférez-vous:
Assert.That(obj.Foo, Is.EqualTo(true))
ou
Assert.True(obj.Foo)
Pour moi, les deux affirmations sont équivalentes, alors laquelle devrait être préférée?
Dans ce cas particulier, il n'y a pas de différence: vous verrez la sortie à peu près du même niveau de détail (c'est-à-dire qu'elle vous indique que quelque chose qui devait être évalué à true
a été évalué à false
). De même pour
Assert.IsTrue(obj.Foo);
et
Assert.That(obj.Foo, Is.True);
Votre équipe doit choisir un style d'assertions et le respecter tout au long de vos tests. Si votre équipe préfère le style Assert.That
, Vous devez utiliser Assert.That(obj.Foo, Is.True)
.
Assert.That
est appelé le modèle basé sur les contraintes. Il est flexible car la méthode prend un paramètre de type IConstraint
. Cela signifie que vous pouvez structurer votre code avec une hiérarchie ou une structure d'appel plus générique, en passant n'importe quel ancien IConstraint
. Cela signifie que vous pouvez créer votre propre contraintes personnalisées
C'est un problème de conception. Comme tout le monde le dit, peu importe ce dont vous avez besoin pour fournir des commentaires de message d'erreur décents.
Alors ok, vous avez exécuté votre suite de tests sur le serveur CI et malheureusement, l'un d'eux a échoué. Vous ouvrez les journaux et voyez le message suivant
BusinessLogicTests.LoginTests.UserAutoLoginTests failed: expected true but was false
Maintenant, comment diable obtiendriez-vous ce qui s'est mal passé avec ces tests, si toutes les informations que vous voyez, est que quelque part dans AutoLoginTests, le bool était censé être vrai, mais reçu faux? Maintenant, vous devez aller dans le fichier source de vos cas de test et voir quelle assertion a échoué. Tu vois
Assert.True(obj.Foo)
Étonnamment .. il est toujours difficile de dire ce qui ne va pas, seulement si vous avez développé ce module il y a 1 heure. Vous devez toujours approfondir les sources de tests et probablement les sources de production ou même déboguer votre code, afin que vous puissiez enfin comprendre que vous avez mal orthographié une variable dans l'appel de fonction ou utilisé un mauvais prédicat pour filtrer les utilisateurs enregistrés. Ainsi, vous avez bloqué la rétroaction immédiate des tests, ce qui est très précieux.
Mon point est que peu importe la fluidité de vos affirmations (qui sont également pertinentes), mais quelles informations vous exposez en cas d'échec des tests et à quelle vitesse pouvez-vous obtenir la raison sous-jacente de l'échec, même si vous avez travaillé longtemps il y a avec ce devoir
C'est un peu difficile, mais à mon humble avis, je pense que dans ce cas Assert.That
est inutilement verbeux et peut donc être considéré comme de l'obscurcissement. En d'autres termes, Assert.True
est un peu plus propre, plus simple et plus facile à lire et donc à comprendre.
Pour devenir un peu plus pointilleux, je suggère d'utiliser le Assert.IsTrue
API au lieu de Assert.True
puisque, encore une fois à mon humble avis, IsTrue
"lit" mieux.