2008-12-03 2 views
35

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

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

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

+0

Спасибо за обратную связь. Я отметил ответ GalacticCowboy как правильный, поскольку это, очевидно, правильный ответ, основанный на том, как формулируется вопрос. Еще раз спасибо за отзыв и извините, если вопрос был расплывчатым. – 2013-07-27 17:34:28

+0

Для тех, кто думает «на этот вопрос нужно больше», вы правы. В сущности, я искал лучший способ поднять/вызывать/моделировать исключение. Как заявил Джеймс Карран, это появление исключения, а не бросание исключения, за которым я буду. Принуждение DivideByZeroException является моей стратегией по умолчанию, хотя я думал, что может быть другой способ или, возможно, даже лучшее исключение для силы. Скорее всего нет никакой разницы между бросанием и «поднятием» исключения. Похоже, что большинство ответов такого мнения. – 2013-07-27 17:35:01

ответ

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

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

throw new Exception("Test Exception"); 

Вам потребуется

using System; 
+0

Вы не должны использовать Exception самостоятельно, вы должны либо использовать существующую реализацию, либо создать свой собственный. Исключение слишком общее. Брэд Абрамс (из команды разработчиков платформы .NET) заявляет, что он хочет, чтобы они могли переделать этот класс с помощью частного конструктора, чтобы избежать его использования, как это – 2008-12-03 02:00:27

+0

Это хорошо для тестирования нового журнала аудита. Очень простой, который сломается. работал на меня, спасибо. – JoshYates1980 2015-01-09 21:29:38

3

бросок exceptionhere;

Не так ли?

Пример I был найден

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

throw new DivideByZeroException("some message");?

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

0

Для тестирования вы, вероятно, хотите, чтобы создать определенный класс (возможно TestFailedException?) И бросить его, а не угон другого типа исключения.

1

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

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

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

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

2

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

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

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

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

5

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

[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); 
} 
1
 try 
     { 
      string a="asd"; 
      int s = Convert.ToInt32(a); 
     } 
     catch (Exception ex) 
     { 

      Response.Write(ex.Message); 
     } 

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

Смежные вопросы