7

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

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

Как насчет вас? когда вы, ребята, заботитесь об исключениях?

+1

Открытые вопросы должны быть общими вики. Кроме того, вы должны четко указать, есть ли у вас язык. В противном случае отметьте его языком-агностиком. –

ответ

3

Лично я всегда определяю глобальный необработанный диспетчер исключений, соответствующий типу приложения, и имею эти исключения для журнала и электронной почты для моей команды разработчиков. Во время QA мы начнем добавлять конкретные управления исключениями к подпрограммам, которые имеют предсказуемые (и восстанавливаемые) проблемы. В каждом возможном случае мы добавляем защитный программный код, чтобы исключение не происходило вообще. (Нет необходимости ловить исключение, если вы можете протестировать, прежде чем пытаться выполнить код, который может потерпеть неудачу.)

Мои приложения, как правило, имеют много защитного кода (который должен быть построен с самого начала) и только некоторые конкретные Обработка исключений.

+0

Я делал так, как во время программирования. Дайте мне знать, если я ошибаюсь. при получении некоторых данных из внешнего источника, тестирование, если оно пустое, прежде чем использовать его, то использование необходимых мер предосторожности является примером защитного кода? – Marcelo

+0

Точно верно, Марсело. Проверьте, нет ли объекта null перед вызовом его методов и т. Д. –

1

Я бы сказал, что это обратное (но общее).

Вы можете захотеть взглянуть на тест-разработки на основе, и проверить первый дизайн

Подсказка: думать о поведении, написать код, чтобы проверить его, добавить его к вашему приложению.

2

Я предпочитаю разработку, основанную на тестах. Если есть ожидаемое условие ошибки, проверьте его. Если возникла непредвиденная ошибка, выполните проверку на нее, а затем исправьте ее.

1

Я бы определенно рассмотрел исключения, возникшие при разработке каждого интерфейса и модуля.

Таким образом, вы можете проверить, что они надежно брошены (когда вы ожидаете, а не когда нет). Компоненты, потребляющие эти компоненты, затем могут быть записаны, чтобы быть в курсе этих исключений и обрабатывать (или нет, как они требуют).

Мне кажется, что вы игнорируете некоторые функции компонентов, которые вы разрабатываете. Я практически всегда проверю как правильную функциональность, так и исключительные обстоятельства, чтобы как можно скорее охватить столько сценариев, сколько я могу.

+0

Согласен. Я предпочитаю документировать (в комментариях XML) исключения, которые могут быть выбраны методами, когда это возможно. – TrueWill

0

Ответ на этот вопрос очень ясен: «Это зависит».

Вам необходимо посмотреть на конкретную ситуацию; является ли исключение конкретным фрагментом кода, где можно восстановить или обработать «исключительную» ситуацию, в результате чего возникает исключение? В таком случае да, поймайте исключение и справитесь с ним на этом уровне.

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

+0

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

+0

Если есть возможность «свалиться ответственно», я бы все же категоризировал это как ситуацию, когда можно справиться с исключительной ситуацией. Однако, что-то вроде исключения памяти не может быть надежно обработано (код обработки может привести к тому, что одна и та же проблема повторится), поэтому я считаю, что это «невосстанавливаемая» ошибка. –

0

Правило для исключения исключений обычно: везде это место, где вы можете осмысленно обращаться с ними.

0

Иногда это зависит от технологии или целевой платформы.Обычно я предпочитаю уровень обработки исключений, который заботится обо всех исключениях. Каждый блок кода находится внутри блока catch try.

Суть заключается в том, что никакое исключение не должно быть уловлено ОС или любым другим объектом вне программы или кода.

0

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

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

0

Наиболее распространенная вещь, которую я видел, - это разработчики, которые сознательно выбирают, на каком уровне обрабатывать исключения, и позволять им быть выброшенными. Как правило, это будет уровень рабочего потока или высокий уровень бизнес-логики. Разрешить исключения и использовать общий метод обработки/регистрации и защиты пользователя от них.

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

Исправление особых исключений выполняется с помощью вашего метода исправить это, когда это проблема. Иногда библиотека, которую я использую, будет бесполезно использовать исключения для передачи информации, и я добавлю специализированную обработку исключений для всех вызовов в эту библиотеку. Часто я буду делать это в классе-оболочке, который скрывает реализацию и обработку исключений из остальной части моего приложения.