我正在研究Ruby Kons,我在about_Hashes中停了下来。我花了一些时间来理解断言是什么以及它们是如何工作的,我想我得到了它但是突然assert_raise
出现了!我很困惑,现在甚至谷歌都可以清楚地向我解释它是如何工作的。所以基本上有我的问题:
这段代码:
hash = { :one => "uno" }
assert_raise(KeyError) do
hash.fetch(:doesnt_exist)
end
等同这段代码:
hash = {:one => "uno"}
begin
hash.fetch(:doesnt_exist)
rescue Exception => exp
exp.message
end
我说错了吗?
答案 0 :(得分:2)
你很接近 - assert_raise
在你的情况下会看起来更像这样:
hash = {:one => "uno"}
begin
hash.fetch(:doesnt_exist)
rescue KeyError
# Test passes if this happens
rescue Exception
# Test fails if any other exception is raised, must be KeyError
end
# Test fails if no exception is raised
唯一的区别是它确保捕获的异常是您声明的异常。
assert_raise
是Test::Unit
的一部分。它表示后面的代码块应引发异常。你与begin
和rescue
的近似非常接近,所以看起来你从根本上理解它。