我想测试一个抛出特定错误的模型上的函数。该函数看起来像这样:
def merge(release_to_delete)
raise "Can't merge a release with itself!" if( self.id == release_to_delete.id )
raise "Can only merge releases by the same artist" if( self.artist != release_to_delete.artist )
#actual merge code here
end
现在我想做一个断言,当我用一个导致每个异常的参数调用这个函数时,实际上会抛出异常。我正在查看ActiveSupport文档,但我没有找到任何有希望的东西。有什么想法吗?
答案 0 :(得分:97)
因此,单元测试并非真正支持。 Ruby在标准库中有一个典型的xunit框架(ruby 1.8.x中的Test :: Unit,ruby 1.9中的MiniTest),而activesupport中的东西只是添加了一些内容。
如果您使用的是Test :: Unit / MiniTest
assert_raise(Exception) { whatever.merge }
如果您使用的是rspec(遗憾的是记录不清,但更受欢迎)
lambda { whatever.merge }.should raise_error
如果您想检查引发的Exception
:
exception = assert_raises(Exception) { whatever.merge }
assert_equal( "message", exception.message )
答案 1 :(得分:14)
要确保在测试用例中没有引发(或成功处理)异常:
assert_nothing_raised RuntimeError do
whatever.merge
end
要检查测试用例内是否出现错误:
assert_raise RuntimeError do
whatever.merge
end
只是抬头,whatever.merge
是引发错误的代码(或者不是,取决于断言类型)。