1

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

我对么?

4

1 回答 1

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,因此看起来您从根本上理解它。

于 2013-05-22T11:48:50.073 回答