Je viens de commencer à écraser 'Debugging MS .Net 2.0 Applications' par John Robbins, et je suis devenu confus par son évangélisation pour Debug.Assert (...).Debug.Assert vs exceptions spécifiques lancées
Il souligne que Affirme bien mis en œuvre stocker l'état, un peu, d'une condition d'erreur, par exemple:
Debug.Assert(i > 3, "i > 3", "This means I got a bad parameter");
Maintenant, personnellement, il me semble fou pour qu'il aime tant retraiter son test sans commentaire logique logique d'entreprise, peut-être "i < = 3 ne doit jamais arriver à cause du processus de widgitification de flobittyjam". Donc, je pense que j'obtiens des assertions comme un genre de bas niveau "Supposons mes hypothèses" ... en supposant que l'on pense que c'est un test qu'il suffit de faire en débogage - c'est à dire que vous êtes vous protéger contre vos collègues et futurs programmeurs, et espérer qu'ils testent réellement les choses. Mais ce que je ne comprends pas, il continue en disant que vous devriez utiliser des assertions en plus de la gestion des erreurs normales; maintenant ce que je prévois est quelque chose comme ceci:
Debug.Assert(i > 3, "i must be greater than 3 because of the flibbity widgit status");
if (i <= 3)
{
throw new ArgumentOutOfRangeException("i", "i must be > 3 because... i=" + i.ToString());
}
Qu'ai-je gagné par la répétition Debug.Assert du test de condition d'erreur? Je pense que je l'obtenir si nous parlions de double contrôle de débogage uniquement d'un calcul très important ...
double interestAmount = loan.GetInterest();
Debug.Assert(debugInterestDoubleCheck(loan) == interestAmount, "Mismatch on interest calc");
... mais je ne suis pas pour les tests de paramètres qui sont sûrement la peine vérification (dans les versions DEBUG et Release) ... ou non. Qu'est-ce que je rate?
assertions peuvent être utilisées pour la vérification du paramètre de * appels de méthodes internes d'* (appelée par le code appartenant au même composant) des procédés, par opposition à des appels de méthodes externes (appelé par un autre composant) . Par exemple, je pourrais affirmer qu'un paramètre de méthode privé de type Double n'est pas un NaN. – RoadWarrior
@Chris: Vous indiquez que les assertions ne doivent pas être utilisées pour la vérification des paramètres. Y a-t-il une raison à cela? J'ai tendance à jeter des exceptions pour les contrôles de paramètres, en particulier dans les constructeurs lorsque j'injecte des objets dépendants. Cependant, on me dit d'utiliser Assertions. Je n'ai pas d'explication logique à l'utilisation d'exceptions plutôt que d'affirmations. Êtes-vous capable de clarifier? Cheers –
Ne vous inquiétez pas, j'ai découvert pourquoi. Selon Jon Skeet, http://stackoverflow.com/questions/1276308/exception-vs-assertion: "Utilisez des assertions pour les vérifications logiques internes dans votre code, et des exceptions normales pour les conditions d'erreur en dehors du contrôle de votre code immédiat." –