2012-05-14 66 views
6

我一直在觀看Ryan Bates的RailsCasts多年,而且我也是該網站付費部分的客戶。我從過去觀看黃瓜劇集學習了BDD。Rails 3測試框架混淆

現在我已經瞭解了TestUnit,RSpec,Capybara和MiniTest。我開始對什麼是什麼感到困惑。

這4項內容有何區別?我知道很顯然Cucumber執行純文本功能,我想這可以被認爲是集成測試。

但現在我也看到最近版本的黃瓜需要MiniTest? Cucumber只是一個位於測試框架之上的DSL嗎?

我也知道RSpec有自己的語法糖做斷言,「描述」塊。看來MiniTest也支持這種語法。

我知道Capybara用於查看生成的網頁內容,我想。

這裏是我的問題:

如果我創建一個新的Rails 3.2的應用程序,我應該用什麼這些測試程序的組合?什麼是額外有益的是解釋這些寶石及其相關的進程如何補充清單相互適用,如:

Cucumber is a DSL for driving BDD 
Cucumber is for integration tests and is based on creating user stories that are customer-readable 
It implements its tests behind the scenes via MiniTest 
MiniTest is a new testing framework that comes with Ruby 1.9 and is very fast. 
MiniTest is also used for unit testing, such as testing controllers and models 
It does not yet have as many features as RSpec 
Cucumber also uses Capybara to access DOM elements from a javascript-enabled browser simulator such as Selenium 
When you test in Rails, you have the ability to do the following kinds of tests: controllers, views, models, and integration (MVC together) 
Some people just do integration and model testing, because they feel that integration testing handles enough of the controller and view testing itself, and anything too complex can simply be moved up to the model 

謝謝你這麼多,你可以提供給清除這些想法爲我的任何幫助。

回答

8

好了,讓我試着解釋,根據我自己的經驗

黃瓜,是ATDD(或BDD)工具,可以讓你寫在一個面向業務領域的語言測試。它的主要用途是作爲產品所有者的對話工具。作爲被測試系統的例子,你不必寫出詳細的要求,而是將這些要求表達出來。實際上,每個黃瓜測試都成爲必須滿足的業務要求。

Cucumber工具本身將這些純文本語句翻譯成一個小模塊,供您執行ruby代碼。您在步驟定義中使用的Ruby庫完全取決於您正在使用的項目。

描述Cucumber最安全的方式是它是一個強調IT和業務合作伙伴之間溝通的測試框架,這就是爲什麼它變得如此受歡迎。

Rspec和Minitest是具有其他優勢的其他框架,但缺乏這種業務可讀性因素,因爲它們主要是代碼,並且對於非技術人員而言幾乎不可讀。這並不是一件壞事,尤其是如果你的產品擁有者多一點動手。

這是如何配合像水豚這樣的東西? Capybara是一款集成測試自動化庫,它可以在Rack :: Test框架上驅動無頭瀏覽器,以便進行快速測試,並且具有高度可讀的DSL。唯一的缺點是Rack :: Test不支持JavaScript,所以如果你運行一個javascript測試,它提供了一個故障轉移到Selenium的方法。 Rspec和Cucumber都有觸發此故障轉移的機制。

還有很多其他的Ruby自動化庫。例如,如果您正在對非Rails Web應用程序進行測試,則可以使用Watir-Webdriver定義黃瓜方案,這將驅動完整的Web瀏覽器,如Capybara在JavaScript模式下執行的操作。主要區別在於WW擁有比Capybara更強大的選擇器集合,所以寫起來更容易一些,特別是如果你的代碼不是超級清潔(Capybara只支持通過ID,值和文本進行選擇,而WW支持選擇幾乎所有的東西)

所以你可能想要使用RSpec或Minitest進行單元測試)或者默認的Test :: Unit)和Cucumber進行集成測試如果你有一個感興趣的產品所有者或需求用於測試場景的通用語言。如果你不這樣做,你可以把你的集成測試寫成Rspec的例子或者最小的等價文件而不會損失太多。

+0

非常有幫助。非常感謝DVG。 – Saim