Какой лучший способ вызвать исключение в C #? - PullRequest
41 голосов
/ 03 декабря 2008

Я традиционно развертываю набор веб-страниц, которые позволяют вручную проверять основные функции приложения. Одним из примеров является LoggerTest.aspx, который генерирует и регистрирует тестовое исключение. Я всегда хотел вызывать DivideByZeroException, используя подход, подобный следующему фрагменту кода:

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

Код работает просто отлично, но я чувствую, что должно быть более элегантное решение. Есть ли лучший способ вызвать исключение в C #?

Ответы [ 12 ]

70 голосов
/ 03 декабря 2008
try
{
  throw new DivideByZeroException();
}
catch (DivideByZeroException ex)
{
  LogHelper.Error("TEST EXCEPTION", ex);
}
27 голосов
/ 03 декабря 2008

Краткий ответ:

throw new Exception("Test Exception");

Вам понадобится

using System;
5 голосов
/ 03 декабря 2008

Создать собственное исключение для целей тестирования? Затем вы можете добавить любые пользовательские свойства, которые вы хотите, чтобы исключение сопровождало его, в процессе обработки / регистрации исключений ...

 [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
 }

в вашем классе

 try
 {  
      throw new TestException();
 }
 catch( TestException eX)
 {  
    LogHelper.Error("TEST EXCEPTION", eX);
 }
3 голосов
/ 03 декабря 2008

Итак, позвольте мне сделать шаг вперед, чтобы продолжать делать то, что вы делали. Вы не хотите проверять, что происходит, когда выбрасывается DivideByZeroException; Вы хотите проверить, что происходит, когда на самом деле происходит деление на ноль.

Если вы не видите разницы, подумайте: действительно ли вы уверены, когда хотите проверить NullRefernceException и когда ArgumentNullException?

3 голосов
/ 03 декабря 2008

бросить исключение сюда;

Не правда ли?

Пример, который я нашел, был

        if (args.Length == 0)
        {
            throw new ArgumentException("A start-up parameter is required.");
        }
2 голосов
/ 24 ноября 2016
        try
        {
            string a="asd";
            int s = Convert.ToInt32(a);
        }
        catch (Exception ex)
        {

            Response.Write(ex.Message);
        }

Будет возвращено исключение «Входная строка была не в правильном формате.»

2 голосов
/ 03 декабря 2008

Спасибо за отзыв. Я пометил ответ GalacticCowboy как правильный, поскольку это, очевидно, правильный ответ, основанный на том, как сформулирован вопрос.

Для тех, кто думает, что "этот вопрос должен быть побольше", вы правы. По сути, я искал лучший способ вызвать / вызвать / смоделировать исключение. Как заявил Джеймс Керран, это скорее исключение, чем исключение, за которым я следую. Формирование исключения DivideByZeroException является моей стратегией по умолчанию, хотя я думал, что может быть другой способ или, возможно, даже лучшее исключение для принудительного применения.

Скорее всего, нет разницы между броском и "поднятием" исключения. Кажется, что большинство ответов, по крайней мере, такого мнения.

Еще раз спасибо за отзыв и извините, если вопрос был расплывчатым.

1 голос
/ 03 декабря 2008

Если вы просто тестируете метод Error LogHelper, зачем вообще выдавать исключение? Вам просто нужен однострочник:

LogHelper.Error("TEST EXCEPTION", new Exception("This is a test exception"));
1 голос
/ 03 декабря 2008

throw new DivideByZeroException("some message");?

Или я что-то упустил?

0 голосов
/ 09 ноября 2018
public class CustomException: Exception
{
     public CustomException(string message)
        : base(message) { }

}

// if(something == anything) { throw new CustomException(" custom text message"); }

Вы можете попробовать это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...