web-dev-qa-db-fra.com

Assert.That vs Assert.True

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?

35
Razer

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).

18
dasblinkenlight

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.

11
radarbob

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

5
Ilya Ivanov

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.

2
Paul Sasik