2012-02-27 75 views
0

我們在做RSpec 2的rails 3.2.1項目。我的問題是,我應該測試每個activerecord模型的基本持久性嗎?我曾經在C#/ NHibernate的日子裏這樣做過,以確保正確的表/映射在那裏。一個單元應該在rails中測試持久性嗎?

所以,如果我有姓名,地址和電話領域的客戶,我可能會寫這樣一個RSpec:

describe Customer do 
    it "saves & retrieves its fields to and from the db" 

    c = Customer.new 
    c.name = "Bob Smith" 
    c.address = "123 some street" 
    c.phone = "555-555-5555" 
    or = Order.new 
    c.orders << or 

    c.save 

    found = Customer.find(c.id) 
    found.should_not be(c) 
    found.name.should == c.name 
    found.address.should == c.address 
    found.phone.should == c.phone 
    found.orders.count.should == 1 
    found.orders[0].id.should == or.id 

    end 
end 

這是「最佳實踐」或常見的的Ruby/Rails/rspec的世界嗎?我還應該指出,重點不是測試rails本身在做什麼,而是測試在db和模型中設置了正確的字段和關係。

回答

3

不可以,您不應該是單元測試持久性。單元測試驗證單元是否獨立工作,您應該只測試您的代碼。持久性功能是Rails的一部分,因爲它不是你的代碼,所以你不應該爲它編寫單元測試。

可以有興趣在測試映射,但不是在一個單元測試。你會寫一個集成測試。集成測試將測試您的模塊,與系統的另一部分集成,或許一直到數據庫。運行這些測試將驗證你的模塊是否可以與數據庫一起工作,即映射是好的。

總之 - 你不測試持久性單元測試;你在集成測試中測試它們。

+0

我想我使用的是錯誤的術語。我忘記了單元測試和集成測試之間的區別。所以在你看來,在rails中爲這些類型的映射創建集成測試是一個好主意嗎?這是常見的嗎? – fregas 2012-02-28 23:00:43

+0

我必須承認,我對Rails不是很熟悉,因爲我在.net框架中擁有大部分經驗,但是,對於使用集成測試來測試持久層是非常普遍的。此外,從技術上講,任何持久層測試都將是集成測試,任何SAT測試都會包含持久性驗證。 – 2012-03-01 07:57:21

+0

+1用於解釋何時適用,即使它在OP描述的情況下不合適。 – 2014-09-08 04:17:27

3

不,我不認爲這是一種最好的做法,做這種較低級別的測試,因爲這些測試的大部分將被內置到Rails和您正在使用的ORM的測試中。但是,如果您重寫模型中的任何方法或執行復雜的關聯邏輯,最好是進行自己的測試。

相關問題