Quelle est la meilleure façon de générer une exception en C #?

Je déploie traditionnellement un ensemble de pages Web qui permettent une validation manuelle des fonctionnalités essentielles de l’application. LoggerTest.aspx, par exemple, génère et enregistre une exception de test. J’ai toujours choisi de générer une exception DivideByZeroException en utilisant une approche similaire à l’extrait de code suivant:

try { int zero = 0; int result = 100 / zero; } catch (DivideByZeroException ex) { LogHelper.Error("TEST EXCEPTION", ex); } 

Le code fonctionne bien mais je pense qu’il doit y avoir une solution plus élégante. Existe-t-il un meilleur moyen de générer une exception en C #?

 try { throw new DivideByZeroException(); } catch (DivideByZeroException ex) { LogHelper.Error("TEST EXCEPTION", ex); } 

Réponse courte:

 throw new Exception("Test Exception"); 

Tu auras besoin de

 using System; 

Construire une exception personnalisée à des fins de test? Ensuite, vous pouvez append les propriétés personnalisées que vous souhaitez que l’exception contienne pendant le processus de gestion / consignation des exceptions …

  [Serializable] public class TestException: ApplicationException { public TestException(ssortingng Message, Exception innerException): base(Message,innerException) {} public TestException(ssortingng Message) : base(Message) {} public TestException() {} #region Serializeable Code public TestException(SerializationInfo info, StreamingContext context): base(info, context) { } #endregion Serializeable Code } 

Dans votre classe

  try { throw new TestException(); } catch( TestException eX) { LogHelper.Error("TEST EXCEPTION", eX); } 

jeter exceptionnellement

N’est-ce pas?

Exemple que j’ai trouvé était

  if (args.Length == 0) { throw new ArgumentException("A start-up parameter is required."); } 

Alors, laissez-moi mettre un pas pour continuer à le faire comme vous étiez. Vous ne voulez pas tester ce qui se passe quand une DivideByZeroException est lancée; vous voulez tester ce qui se passe quand une division par zéro se produit réellement.

Si vous ne voyez pas la différence, prenez en compte les points suivants: Êtes-vous certain de savoir quand vous voulez vérifier les NullRefernceException et quand ArgumentNullException ?

Merci pour les commentaires. J’ai bien noté que la réponse de GalacticCowboy est correcte, car c’est évidemment la bonne réponse en fonction de la formulation de la question.

Pour ceux qui pensent “il doit y avoir plus à cette question”, vous avez raison. Essentiellement, je cherchais une meilleure façon de déclencher / provoquer / simuler une exception. Comme James Curran l’a déclaré, c’est l’apparition de l’exception plutôt que le déclenchement d’une exception que je suis après. Forcer une DivideByZeroException est ma stratégie par défaut, même si je pensais qu’il pourrait y avoir une autre façon, voire une meilleure exception à la force.

Plus que probablement, il n’y a pas de différence entre lancer et «lever» une exception. La majorité des réponses semblent être de cet avis au moins.

Merci encore pour les commentaires et désolé si la question était vague.

  try { ssortingng a="asd"; int s = Convert.ToInt32(a); } catch (Exception ex) { Response.Write(ex.Message); } 

Il retournera une exception “La chaîne d’entrée n’était pas dans un format correct.”

throw new DivideByZeroException("some message"); ?

Ou est-ce que je manque quelque chose?

Si vous testez simplement la méthode d’erreur de LogHelper, pourquoi même lancer l’exception? Vous avez juste besoin d’un one-liner:

 LogHelper.Error("TEST EXCEPTION", new Exception("This is a test exception")); 

A des fins de test, vous souhaiterez probablement créer une classe spécifique (peut-être une exception TestFailedException?) Et la lancer plutôt que de détourner un autre type d’exception.

Est-ce que

 System.Diagnostics.Debug.Assert(condition); 

vous donner une alternative?

Peut-être alors utiliser

 catch (AssertionException) { } 

pour enregistrer un échec de test.

Voir aussi C # – Que fait la méthode Assert ()? Est-ce toujours utile? et http://en.csharp-online.net/Assert .