2011-03-30 33 views
11

我碰巧是Ruby Inside的訂戶,因爲我對Rails特別感興趣。昨天,Rails的創始人David Heinemeier Hansson幾乎說過他只是使用測試/單元。我會理解的,因爲這是Rails的內部,但他似乎給出了強烈的意見。他認爲RSpec和黃瓜是不必要的複雜。單元測試DHH:RSpec確實是不必要的複雜?

我通常不會太在意,但這取決於誰在說些什麼。我很尊重Hansson,他的觀點讓我思考。當我開始使用Rails時,我從未真正考慮過測試/單元。只需RSpec和黃瓜。

這就是爲什麼我想要你的洞察力。你認爲RSpec確實很複雜,沒有多少附加價值?編寫測試/單元是否花費更少的時間和精力?

+0

我同意DHH,因爲軌道測試/單元看起來不錯。我已經使用軌道測試框架工作,RSpec,硒等,並感覺相同DHH – Ashish 2011-03-30 07:29:47

+1

如果你有資源加錢加上時間50%以上的資源加載。 不用說相對冷凍的要求BDD/TDD是偉大的,否則堅持DHH說。 非常感謝他寫了這篇博文.. – Abs 2014-05-16 19:43:03

回答

14

我的建議是使用Shoulda(擴展測試::單元)或RSpec與水豚和-no-黃瓜。

我認爲對於嵌套上下文使用RSpec或Shoulda是絕對值得的。 RSpec絕對是重量級的(也許是超重的),而且我也因爲這個原因在圍欄上。

黃瓜,我終於明白,waaay比它通常的價值更繁瑣。您可以使用普通酒精測試和水豚更簡單,更健全地完成您的需求。記住 - 水豚!=黃瓜,和水豚是完全有能力的一切。

Shoulda很好,因爲它只是增加了標準Test :: Unit框架的便利性,因此比RSpec輕得多(從技術上講,每個解決了一系列不同的問題,但它們都提供了嵌套上下文功能)。 RSpec具有使斷言更自然地閱讀的優點,並且在許多情況下也生成更有用的失敗消息,而不需要在斷言上編寫消息參數。另外,請記住,黃瓜實際上並不需要RSpec,所以如果你想繼續使用黃瓜,你可以用Test :: Unit來做到這一點。選擇比比皆是。

+0

事實上,從rpsec免費發佈的automagic故障信息是它具有吸引力的很大一部分。 – 2011-03-30 14:16:44

+2

Cucumbersome! ;) – 2012-03-17 22:48:48

+0

由於我寫了這篇文章,我已經瞭解到黃瓜不需要如此繁瑣。對所有項目來說都是不正確的,但它可能是編纂規範的非常有價值的方法。編寫好的黃瓜測試的關鍵是要根據商業價值撰寫它們,並避免對具體實施的敬畏。如果你的小黃瓜含有像「頁面」或「點擊」這樣的詞不那麼好。此外,黃瓜測試不一定需要全部堆棧。黃瓜測試可能會在較低的水平上執行,只需通過Capybara進行一些集成測試即可進行全棧驗證。 – 2013-08-18 11:00:35

8

這完全是關於語義。 RSpec和Test :: Unit在功能上類似。就我個人而言,我一直比較喜歡RSpec,因爲我發現用它編寫測試更自然。我也喜歡寫簡單的custom matchers,並且提供的默認匹配器很有用。

黃瓜是完全不同的野獸。是的,如果你沒有正確地組織你的步驟定義,它會非常麻煩並且很難維護,但它確實有一個非常強大的用例,那就是當你的客戶正在編寫你的規範時。

我已經參與了客戶一直在和我們的QA團隊一起編寫黃瓜場景的項目。作爲非技術人員,它是一種非常平易近人的方式,可以在代碼中指定用戶故事。黃瓜確實幫助我們在遵循敏捷實踐時走路。最終產品的質量受益,但不,我不黃瓜作爲開發者:)

3

這是一個個人的品味問題。

我喜歡寫簡單的黃瓜測試,而不用擔心細節。只是測試我的應用程序的「開心」的路徑。 (便攜,可以理解,很慢)

我將詳細信息留給測試/單元。(方便,快捷)

它需要更多的時間來理解:的

get :products, :session => @session_id_for_product_banana 
assert_select "table" do 
    assert_select "td#name", "Banana" 
end 

代替

When I go to the banana page 
Then I should see "Banana" 

當然這些測試是不相等的,但誰在乎「香蕉」是否是一個div或一個表或沒有正確的html-id。

我不喜歡功能測試,因爲重構後,ID可能會消失,會話期望可能會改變。如果是這種情況,您將需要重構代碼和測試。如果你使用黃瓜,你不需要改變你的方案。

+2

如果您關心表格中的「香蕉」,而不僅僅是錯誤消息「未定義的方法」找到「香蕉」的一部分:String? – Arsen7 2011-06-01 10:29:01

+0

這可能發生,但不太可能。 id更改或您決定使用div的可能性更大。如果視圖不包含邏輯,那麼通常你會在單元測試中遇到這種錯誤。此外,Cucumber在運行時錯誤中往往會因爲堆棧跟蹤而炸燬。 – 2011-06-01 15:52:53