Rails的ActiveSupport:如何断言提出了一个错误?

我想testing我的模型之一,引发特定错误的function。 该函数看起来像这样:

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 

现在我想做一个断言,当我调用这个函数的一个参数,导致这些exception,实际上是抛出exception。 我正在查看ActiveSupport文档,但我没有find任何有希望的。 有任何想法吗?

所以unit testing并没有真正的支持。 Ruby在标准库中有一个典型的xunit框架(ruby 1.8.x中的Test :: Unit,Ruby 1.9中的MiniTest),activesupport中的东西只是添加了一些东西。

如果你正在使用Test :: Unit / MiniTest

 assert_raises(Exception) { whatever.merge } 

如果你使用的是rspec(不幸的是logging不好,但方式更受欢迎)

 lambda { whatever.merge }.should raise_error 

如果你想检查提出的Exception

 exception = assert_raises(Exception) { whatever.merge } assert_equal( "message", exception.message ) 

为了确保不会引发exception(或成功处理),请在您的testing用例中执行以下操作:

 assert_nothing_raised RuntimeError do whatever.merge end 

要检查是否出现错误,请在您的testing用例中进行:

  assert_raise RuntimeError do whatever.merge end 

对,就这么简单! 🙂

Interesting Posts