Я задаюсь вопросом, является ли хорошей практикой добавление в мой код утверждений, чтобы гарантировать, что логика моего проекта работает должным образом, чтобы уловить возникновение «вещей, которые не должны происходить». Я использую поднять «сообщение об ошибке», если условие в качестве проверки правильности установки параметров и т. Д. И подобные предположения на самом деле верны, что-то лежит в следующем, где я ожидаю, что если my_method вызывается, определенный Foo должен иметь ненулевого брата, и что в метод передается ненулевое значение:
def my_method(value)
id=Foo.first.id
raise "Value is nil!" if value.nil?
raise "sibling is nil!" if Foo.first.sibling.nil?
increment_sibling(id, value)
end
def increment_sibling(foo_id, increment)
foo=Foo.find(foo_id)
foo.do_something
foo.sibling.value += increment
end
Мой вопрос заключается в том, является ли хорошей практикой использование таких утверждений для «вещей, которые не должны происходить» в производственном коде, когда утверждение может привести к остановке программы. Я мог условно выполнить код только в процессе разработки, но поскольку ошибка, которую я тестирую, обычно фатальна, рабочая версия просто потерпит неудачу где-то еще, возможно, ее будет сложнее найти в цепочке вызовов. Если это плохая идея, есть ли лучшая практика для выявления ошибок такого рода, или лучше просто попытаться написать тесты, которые их перехватят и пропустят утверждения?
Спасибо за ваш совет.