在開發和測試過程中,如果不變量被破壞,是否有內置的方式來指定Rails中的斷言,這會引發異常?從模型或控制器斷言Rails?
編輯:爲了清楚起見,我正在尋找可以放在模型或控制器中的斷言,而不是斷言您將用於單元測試。
在開發和測試過程中,如果不變量被破壞,是否有內置的方式來指定Rails中的斷言,這會引發異常?從模型或控制器斷言Rails?
編輯:爲了清楚起見,我正在尋找可以放在模型或控制器中的斷言,而不是斷言您將用於單元測試。
如果你正在編寫測試,有許多斷言函數。但是對於主代碼中的assertiona來說,沒有任何代碼,你可以很容易地推出自己的代碼。
添加這樣的事情environment.rb
:
class AssertFailure < Exception
end
def assert(message = 'assertion failed')
unless block_given? and yield
raise message
end
end
,並使它成爲一個無操作在environments/production.rb
所以最小的開銷
def assert(message = 'assertion failed')
end
然後,在你的代碼,你可以斷言,以你心中的內容:
assert { value == expected_value }
assert('value was not what was expected') { value == expected_value }
如果value
不等於expected_value
並且您沒有在生產中運行,則會引發異常。
超越these,您的意思是?
引發異常,並使用rescue_from。
正如@Gordon所說,沒有。正如在這個問題中提到的,我最終使用了Jorge Manrubia的solid_assert gem:Is it idiomatic Ruby to add an assert() method to Ruby's Kernel class?
我相信OP在討論主代碼中的斷言,而不是測試斷言。 – 2009-01-28 22:22:56
很難說,不是嗎? :) – 2009-01-28 22:52:23