Je déploie traditionnellement un ensemble de pages Web permettant la validation manuelle des fonctionnalités de base de l'application. LoggerTest.aspx en est un exemple. Il génère et consigne une exception de test. J'ai toujours choisi de créer 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 très bien, mais j’ai le sentiment qu’il doit exister 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? Vous pouvez ensuite ajouter les propriétés personnalisées que vous souhaitez que l’exception emporte avec elle tout au long du processus de traitement/de journalisation des exceptions ...
[Serializable]
public class TestException: ApplicationException
{
public TestException(string Message,
Exception innerException): base(Message,innerException) {}
public TestException(string 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, permettez-moi de continuer à faire comme si 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, réfléchissez aux points suivants: Etes-vous vraiment sûr de vouloir vérifier NullRefernceException
et quand ArgumentNullException
?
try
{
string a="asd";
int s = Convert.ToInt32(a);
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
Il renverra une exception "La chaîne d'entrée n'était pas dans un format correct."
Merci pour les commentaires. J'ai marqué la réponse de GalacticCowboy comme étant correcte, car il s'agit manifestement de 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. En substance, je cherchais le meilleur moyen de générer/provoquer/simuler une exception. Comme James Curran l’a déclaré, c’est l’occurrence de l’exception plutôt que le lancement d’une exception que je recherche. Forcer une exception DivideByZeroException est ma stratégie par défaut, même si je pensais qu'il pourrait y avoir un autre moyen, voire même une meilleure exception, à forcer.
Plus que probablement, il n'y a pas de différence entre lancer et "élever" une exception. La majorité des réponses semblent au moins être de cet avis.
Merci encore pour les commentaires et désolé si la question était vague.
throw new DivideByZeroException("some message");
?
Ou est-ce que je manque quelque chose?
Si vous testez simplement la méthode Error 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"));
Est-ce que
System.Diagnostics.Debug.Assert(condition);
te donner une alternative?
Peut-être alors utiliser
catch (AssertionException) { }
enregistrer un échec de test.
Voir aussi C # - Que fait la méthode Assert ()? Est-ce toujours utile? et http://fr.csharp-online.net/Assert .
public class CustomException: Exception
{
public CustomException(string message)
: base(message) { }
}
//if(something == anything)
{
throw new CustomException(" custom text message");
}
tu peux essayer ça
À des fins de test, vous souhaiterez probablement créer une classe spécifique (par exemple TestFailedException?) Et la lancer plutôt que de détourner un autre type d'exception.