Подтвердить что ты не робот

Вы используете утверждения?

На самом деле это не "вопрос", поэтому я делаю его CW.

assert

Ключевое слово отлично!

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

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

Используете ли вы утверждения? Если нет, то почему?

4b9b3361

Ответ 1

Меня учили использовать множество утверждений еще в 90-х годах, и они имели большой смысл. Это хорошее защитное кодирование.

Однако, я думаю, что теперь это было отменено модульным тестированием, которое фактически заставляет код запускаться и сообщает, где он сломан. Debug утверждает, что кто-то действительно запускает код отладки и смотрит на ui или журналы. Модульное тестирование может автоматизировать это.

Ответ 2

Я использую их все время. Они - хороший способ практиковать философию "Crash early", лучше решить, почему утверждение было неудачным, чем иметь дело с плохим/поврежденным выходом.

Проблема заключается в том, что вы должны сделать это привычкой. Я редко вижу в нем какую-то промежуточную основу, люди либо не привыкли к ней, либо почти никогда не используют их, либо люди используют их, и они строго усеяны во всем коде. Вам просто нужно вдуматься в замешательство: "О, эй, я подразумеваю, что здесь что-то подразумеваю, позвольте мне прямо подтвердить это" assert (ASSUMPTION) "

Ответ 3

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

Я прочитал его в Code Complete или Effective Java. Для обнаружения ошибок программирования следует использовать утверждения. Исключения должны использоваться для обработки исключительных, но возможных ситуаций. Вам не нужно проверять значение null на каждом методе вашего кода, если вы знаете, что значение не будет равно null (как определено в контракте), но не имеет никакого значения утверждать, если значение не равно нулю. Утверждения разрешены только в том случае, если вы указываете параметр -ea для виртуальной машины и не должны влиять на производительность вашего приложения, если оно отключено.

Вы также должны использовать больше записей:-). Узнайте, когда использовать трассировку, отладки и информацию и убедитесь, что вы регистрируете все, что делает ваше приложение. Это облегчает жизнь, когда вам нужно понять, почему что-то не работает в производственной среде.

Ответ 4

Короткий ответ - Да.

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

Для других вещей, таких как "Разбор файлов" и "Файл не найден", я обычно делаю исключения. Таким образом, я могу зарегистрировать ошибку и использовать некоторые отказоустойчивые файлы/методы.

И я вполне согласен с Фалаиной, вы действительно должны обратить внимание на это: "ЭЙ, я делаю некоторые предположения здесь"

Ответ 5

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

Ответ 6

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

Если вам это действительно нужно, в некоторых библиотеках есть статические методы утверждения, которые вы можете вызывать, которые не будут пропущены - они также более читаемы, потому что ключевое слово assert является необычным и сразу может вызвать момент "wtf", но методы Assert.x - это просто методы, которые можно проследить. В структуре Spring, в частности, используется библиотека утверждений.

Ответ 7

Нет, никогда не используйте их. Не знаю почему, просто никогда не привык.

Ответ 8

Если вам нравятся утверждения, вы будете ЛЮБИТЬ контракты. В основном это идея утверждений, распространенных на большее количество ситуаций.

Ответ 9

Да! Всегда! Ключевое слово - мой самый лучший друг на всех языках!

Нет никакой реальной причины не использовать утверждения, они гарантируют, что основные допущения, которые я делаю для входных значений и состояний, поддерживаются.

Если утверждение не выполняется, это означает, что мне нужно переоценить мои предположения и обновить код, чтобы обрабатывать новые экзотические данные, о которых я не думал при написании текущей версии. Что не нравится в этом?

Как обычно в программировании, это инструмент, который работает только при правильном использовании.

Ответ 10

Да, я постоянно пользуюсь утверждениями, в основном, когда я делаю предположение, что:

  • Можно проверить с помощью довольно простого предиката.
  • Не очевидно, что это просто из чтения соседнего кода.

Однако для утверждений, которые могут оказать незначительное влияние на производительность, я использую функцию enforce в стандартной библиотеке языка программирования D вместо assert. Это в основном то же, что и assert, за исключением того, что он остается в режиме деблокирования. Для более дорогих утверждений я использую assert, который удаляется из сборки режима выпуска.

Ответ 11

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

Ответ 12

Ключевое слово Java assert довольно наполовину (нужно запустить программу с параметром командной строки -ea), поэтому я считаю, что полагаюсь на исключения вместо утверждений.

Ответ 13

Я, как правило, не использую их, хотя я не уверен, почему.

Если вы выполняете модульное тестирование, например, с помощью nUnit, вы, очевидно, будете использовать их все время, чтобы проверить результаты своих тестов.

Ответ 14

Нет, я их не использую.

Мне учили, что утверждения не должны использоваться в коде "production", и прежде чем я начну использовать что-то, что мне нужно удалить в любом случае - в соответствии с тем, что я узнал, я придерживаюсь исключения для проверки условий.

Ответ 15

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

Ответ 16

Нет. Но не могу дождаться. Я использовал unit test все с junit, но это была школа, небольшие проекты не оказывали давления. я сейчас в реальной жизни, я должен был закончить этот код вчера....