2010-08-12 84 views
4

我想知道Rspec中的命令步驟和聲明步驟是什麼。Rspec中的命令步驟和說明步驟

下面是來自Rspec的書的示例代碼:

Scenario: transfer money (declarative) 
Given I have $100 in checking 
And I have $20 in savings 
When I transfer $15 from checking to savings 
Then I should have $85 in checking 
And I should have $35 in savings 

Scenario: transfer money (imperative) 
Given I have $100 in checking 
And I have $20 in savings 
When I go to the transfer form 
And I select "Checking" from "Source Account" 
And I select "Savings" from "Target Account" 
And I fill in "Amount" with "15" 
And I press "Execute Transfer" 
Then I should see that I have $85 in checking 
And I should see that I have $35 in savings 

我不太明白了。

我的理解是,只要結果通過,聲明式讓你做任何你想做的事情,而且命令更加冗長。

但是,我不覺得我已經明白了這一點。

有人可以解釋這一點多一點。有什麼區別,我應該選擇哪一個?

回答

8

聲明式是前進的方向。

命令式描述了您作爲用戶而必須採取的實際UI步驟,而不是您嘗試實現的結果。如果用這種方式編寫場景,它們會變得非常脆弱,無法維護。想象一下,如果有人在該命令式場景中添加了確認框,並且有80個類似的場景也需要更改。

使用聲明性步驟,您只需要在定義該步驟的一個位置進行更改;那麼相同的聲明步驟將被重用於所有需要它的場景。

+0

耦合問題的好例子,但是當您使用驗收測試來定義用戶故事中的預期內容時,明確定義這些步驟非常重要。聲明性步驟隱藏了http://en.wikipedia.org/wiki/Specification_by_example所需的詳細信息。 https://github.com/cheezy/page-object看起來像是一個很好的開始,以解決UI耦合而不犧牲所需的細節。 – Brenden 2013-10-18 00:18:48

+0

我發現BDD最適合捕捉對話,而不是完全指定UI交互。這是Dan首先提出「測試」一詞的原因之一。不過,請同意使用頁面對象範例。 – Lunivore 2013-10-19 09:41:41