Ruby:Assert_raise替代方案?

时间:2013-05-22 11:32:33

标签: ruby

我正在研究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

我说错了吗?

1 个答案:

答案 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_raiseTest::Unit的一部分。它表示后面的代码块应引发异常。你与beginrescue的近似非常接近,所以看起来你从根本上理解它。