2009-09-19 64 views
21

我對Ruby/ROR提供的大量測試框架感到有點困惑。黃瓜不需要編寫單元測試嗎?

我最近看了Cucumber Railscasts,發現它們很有趣。所以我開始玩一玩,然後努力從概念上看我會在哪裏進行各種測試。

在Cucumber的單元測試中,似乎完全可以完成所有的工作,所以我需要編寫單元測試,還是應該編寫我的特性定義,並集中精力提供覆蓋範圍和我一樣的可以得到使用。

我應該使用Rspec或Test創建我的單元測試:Unit?當我測試Ajax功能時,我應該使用Selenium還是Watir?

似乎有這麼多的選擇,我很努力地看到使用哪些工具和邊界在哪裏。

什麼是其他人對Cucumber的經驗,以及在寫作Cucumber Integration測試和Test:Unit和/或基於Rspec的單元和功能測試之間的界限。是否有人知道關於這個問題的一個很好的說明,指出在哪些方面在測試方法和各種工具的長處和短處之間畫線。

我明白其中的一些是主觀的,但如何解決這個問題的常見方法會受到歡迎。

回答

20

使用高級Cucumber來描述用戶應該能夠看到和做什麼。使用RSpec,Test:Unit,Shoulda等編寫單元測試。直接從the horse's mouth

當你決定要添加新功能或修復bug,通過編寫一個新的功能或場景描述的特徵應該是如何工作的開始。不要寫任何代碼(還)。

...

這是當你開始寫代碼。首先編寫幾行代碼來解決你從Cucumber獲得的失敗。再次運行黃瓜。重複和沖洗,直到你滿意你的功能。當您仔細考慮細節時,請下拉一個抽象級別,並使用RSpec或任何Ruby測試框架爲您的類編寫一些規格/測試。

黃瓜是用來測試你的整個堆棧在一起,而不是'單位'。

你需要決定在哪裏畫線,但很多底下的東西可能不會被黃瓜測試覆蓋。說到註冊時,我填寫一張表格,包括我的姓名,電子郵件,電話號碼等。單元測試可能會檢查新的User也會創建一個新的TelephoneNumber。從用戶的角度來看,他們並不在乎它會創建一個新的TelephoneNumber,他們關心的是,一旦他們註冊,他們有一個帳戶,並可以看到他們的電話號碼。

我沒有很多經驗寫黃瓜測試(還沒有),但我希望這有助於一點。

1

我個人認爲你不應該停止編寫單元測試。作爲一種驗收測試工具,Cucumber應該替代您的功能測試,並且如果您正在寫作,請查看測試。

黃瓜特徵應該是簡單的,並耦合到給定特徵具有的真實用戶的值。

6

當一個單元測試失敗時(我的意思是一個真正的單元測試,使用mock隔離測試一個方法),它會告訴你什麼「單元」有問題。如果驗收測試失敗,它會告訴您哪些「功能」存在問題,而不是問題所在的位置。

3

當您創建導軌應用程序時,默認情況下會獲得功能性,互動性和單元測試。黃瓜是一種額外的測試,它也是測試用戶體驗的一種方式。當他們點擊標籤爲「go」的按鈕時,他們應該看到呈現的是「成功」,而不是404。這將確保您無意中弄亂了用戶體驗,並且從上到下,您的應用可用於最常見的您可以想到的用例。其他測試的目的是確保沒有任何錯誤,並且您已經使用顯微鏡檢查了以往的模型和方法。也許可以用黃瓜來完整地複製單元測試,但這會很痛苦(並且執行起來非常慢,尤其是在使用硒時)。編寫測試的最佳時間是在開發代碼時,最快速和最簡單的方法是使用內置的rails測試,也許還需要一些額外的幫助,比如shoulda,rspec,我也是工廠女孩的巨大粉絲。如果你還沒有檢查出來www.railscasts.com有一個很好的介紹黃瓜,rspec和工廠的女孩,...我知道這個問題已經被回答(不是),但這是我的兩美分。祝你好運!

3

我一直在想這個問題,並且這裏是我到達的地方。

黃瓜頭和黃瓜最後。黃瓜將提供主要的測試覆蓋率。

執行應用程序真實業務工作的核心模型方法也應該用rspec/unit測試來開發/覆蓋。

爲什麼單元測試以及?

1)單元測試將以更快的速度運行測試。 2)這個核心業務邏輯可能(可能)將以多種方式用於當前視圖之外(Cucumber通過測試)。這些方法應該用各種可能的輸入和輸出來直接調用測試方法。

爲什麼不單元測試其餘的模型,控制器和視圖?

1)黃瓜已覆蓋一次。 2)我發現views-controller-some-model-methods一起工作來完成任務(認爲所有的事情都是爲了登錄);所以我喜歡一起測試它們。

+0

「黃瓜第一和黃瓜最後」很好的引用。我認爲這個答案更多的是像我這樣的初學者需要的水平。 – KobeJohn 2012-01-15 03:42:06

0

根據我的經驗,Cucumber和Rspec有不同的吸引力。 Rspec從開發人員的角度吸引我,因爲它易於編寫,並在出現問題時提供非常快速的反饋。黃瓜不吸引我作爲開發者,因爲它的運行速度不及Rspec。然而,Cucumber確實吸引我作爲一個商業利益相關者,因爲它提供了整個功能的全面覆蓋。

幫你一個忙,並不斷寫單元測試。

2

過去半年左右,我一直在練習黃瓜/ RSpec做BDD。

首先BDD不容易進入,一開始會感覺不自然。

但是一旦你進入它,就沒有其他的方式來編程。

回答你的問題。爲了測試Javascript,你需要一個可以被Cucumber使用的,由Cucumber使用的javascript驅動程序。

水豚,WebKit是什麼所有時尚的年輕人現在使用的這些天

還有要注意的一件重要的事情。

集成測試很慢。

單元測試速度很快,但速度可能很慢,所以重要的是您使用正確的數據庫清理程序,並編寫具有良好隔離性的良好測試。

我的測試設置,其中我與非常高興:

衛隊裝載叉勺 叉勺更快的測試 黃瓜進行集成測試 水豚-的WebKit JavaScript的測試 RSpec的單元測試

我不要做查看測試和控制器測試,因爲在我看來,這些測試和冗餘是多餘的,因爲對XPATH知之甚少,你會寫出非凡的測試,甚至包括你的頁面佈局和結構。