2009-02-12 72 views

回答

14

驗證本身應該是可信的,但你可能要檢查確認是否存在。換句話說,測試某件東西的好方法就好像它是一個黑盒子,從實現中抽象出測試,例如,您可能有一個測試來檢查人員模型不能保存沒有名字,但不關心Person類如何執行驗證。

4

這應該足以接受庫如ActiveRecord的是由開發人員更好地測試比以往任何時候都將是你對他們來說這是一個首要關注的問題,因爲你是在最好的切線。

這並不是說沒有錯誤 - 很久以前我發現了一個很小的MS SQL Server適配器 - 但是您可能正在執行的測試類型不太可能將它們暴露爲他們很可能是邊緣情況。如果你找到一個bug,當然,如果你用暴露它的測試用例報告它可能是非常有用的!

我只測試ActiveRecord的內部,如果我正在尋求更好地瞭解一個特定的方面,該庫實現。我不會在任何應用程序項目中包含這些探索性測試,因爲它們與項目無關。

在一般情況下,你應該寫的代碼,你自己寫的測試:如果你住或嘗試生活在一個TDD的世界,測試前應寫。如果您的模型具有驗證規則,那麼您幾乎肯定應該編寫測試以確保規則存在。在大多數情況下,測試將是微不足道的,但是如果一個不慎線被刪除在未來一段時間會真的有用...

3

由於邁克寫道,起碼你應該測試驗證存在。這只是一個簡單的複式會計(完整性檢查)。

根據具體情況,您還應該測試您的模型在特定情況下是否有效或無效。例如,如果您的字段需要特定的格式,則測試有效的格式和不格式的格式。這是很容易看到這意味着什麼在你的測試讀了幾個例子:

class Person < ActiveRecord::Base 
    validates_format_of :email, 
     :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i 
end 

是的,驗證很好測試和足夠可靠的。但是,您正確使用驗證是您想驗證的內容。

0

作爲一個附註,Ryan Bigg的博文has_and_belongs_to_many double insert提到有人在ActiveRecord中遇到一個錯誤(不過與驗證無關)。正如他指出的那樣,不要認爲Rails不可能有錯誤,因爲我們知道Rails有900個開放門票。

但是,是的,你寫一個測試的主要原因是檢查你的ActiveRecord的使用是正確的。