我想知道将代码用断言来确保我的项目逻辑按预期工作是否是一个好习惯,以便发现不应该发生的事情&#34 ;。我使用了 raise"错误消息"如果条件作为测试正确设置了参数等,并且类似的假设实际上是正确的,那么下面就会出现这样的情况,我希望,如果调用 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
我的问题是,对于那些不应该发生的事情而言,抛出这样的断言是不错的做法"在生产代码中,断言可能会使程序停止。我只能在开发中有条件地执行代码,但由于我测试的错误通常是致命的,生产版本将在其他地方失败,可能更难以在调用链中找到更多。如果这是一个坏主意,是否有更好的方法来捕获这些错误,或者更好的是简单地尝试编写将捕获它们并省略断言的测试?
感谢您的建议。