Je débogue avec des points d'arrêt et je réalise l'appel d'assert? Je pensais que c'était uniquement pour les tests unitaires. Que fait-il plus que le point d'arrêt? Puisque je peux breakpoint, pourquoi devrais-je utiliser Assert?
156
Réponses:
Dans une compilation de débogage,
Assert
prend une condition booléenne comme paramètre et affiche la boîte de dialogue d'erreur si la condition est fausse. Le programme se poursuit sans interruption si la condition est vraie.Si vous compilez dans Release, tous
Debug.Assert
sont automatiquement omis.la source
Debug.Assert
en mode sortie?À partir du code terminé
la source
Vous devriez l'utiliser lorsque vous ne voulez pas avoir à interrompre chaque petite ligne de code pour vérifier les variables, mais que vous voulez obtenir une sorte de retour si certaines situations sont présentes, par exemple:
la source
System.Diagnostics
Assert vous donne également une autre occasion de rire des compétences de conception d'interface utilisateur de Microsoft. Je veux dire: une boîte de dialogue avec trois boutons Abandonner, Réessayer, Ignorer et une explication sur la façon de les interpréter dans la barre de titre!
la source
Assert vous permet d'affirmer qu'une condition (post ou pré) s'applique dans votre code. C'est une façon de documenter vos intentions et de demander au débogueur de vous informer par un dialogue si votre intention n'est pas satisfaite.
Contrairement à un point d'arrêt, l'Assert accompagne votre code et peut être utilisé pour ajouter des détails supplémentaires sur votre intention.
la source
Assert peut vous aider à donner un comportement de messagerie séparé entre le test et la publication. Par exemple,
Debug.Assert(x > 2)
ne déclenchera une pause que si vous exécutez une version de «débogage», pas une version de version. Il y a un exemple complet de ce comportement ici
la source
Tout d'abord, la
Assert()
méthode est disponible pour les classesTrace
etDebug
.Debug.Assert()
s'exécute uniquement en mode débogage.Trace.Assert()
s'exécute en mode Debug and Release.Voici un exemple:
Exécutez ce code en mode débogage, puis en mode Release.
Vous remarquerez qu'en mode débogage, votre
Debug.Assert
instruction de code échoue, vous obtenez une boîte de message indiquant la trace de pile actuelle de l'application. Cela ne se produit pas en mode Release car laTrace.Assert()
condition est vraie(i == 4)
.WriteLine()
La méthode vous donne simplement la possibilité de consigner les informations dans la sortie Visual Studio.la source
Les affirmations occupent une place importante dans la conception par contrat (DbC) qui, si je comprends bien, a été introduite / approuvée par Meyer, Bertand. 1997. Construction logicielle orientée objet.
Une caractéristique importante est qu'ils ne doivent pas produire d'effets secondaires, par exemple vous pouvez gérer une exception ou prendre une autre ligne de conduite avec une instruction if (programmation défensive).
Les affirmations sont utilisées pour vérifier les conditions préalables / postérieures au contrat, la relation client / fournisseur - le client doit s'assurer que les conditions préalables du fournisseur sont remplies, par exemple. envoie 5 £ et le fournisseur doit s'assurer que les post-conditions sont remplies, par exemple. livre 12 roses. (Juste une simple explication du client / fournisseur - peut accepter moins et livrer plus, mais sur les assertions). C # introduit également Trace.Assert (), qui peut être utilisé pour le code de version.
Pour répondre à la question oui, ils sont toujours utiles, mais peuvent ajouter de la complexité + la lisibilité du code et du temps + difficile à maintenir. Devrions-nous encore les utiliser? Oui, allons-nous tous les utiliser? Probablement pas, ou pas dans la mesure de ce que décrit Meyer.
(Même le cours OU Java sur lequel j'ai appris cette technique ne montrait que des exemples simples et le reste du code n'appliquait pas les règles d'assertion DbC sur la plupart du code, mais était supposé être utilisé pour assurer l'exactitude du programme!)
la source
La façon dont j'y pense est Debug.Assert est un moyen d'établir un contrat sur la façon dont une méthode est censée être appelée, en se concentrant sur des détails sur les valeurs d'un paramètre (au lieu de simplement le type). Par exemple, si vous n'êtes pas censé envoyer une valeur null dans le deuxième paramètre, vous ajoutez l'Assert autour de ce paramètre pour dire au consommateur de ne pas le faire.
Cela empêche quelqu'un d'utiliser votre code de manière stupide. Mais cela permet également à cette manière stupide de passer à la production et de ne pas donner le mauvais message à un client (en supposant que vous construisiez une version Release).
la source