2010-05-31 134 views
17

我正在使用SpecFlow做一些BDD式的測試。我的一些功能是UI測試,所以他們使用WatiN。有些不是UI測試,所以它們不是。SpecFlow的功能範圍步驟定義?

目前,我有一個StepDefinitions.cs文件,涵蓋了我所有的功能。我有一個初始化WatiN的步驟BeforeScenario。這意味着我的所有測試都啓動Internet Explorer,無論他們是否需要它。

SpecFlow中是否有任何方法使特定的功能文件與特定的一組步驟定義相關聯?或者我從錯誤的角度來看待這個問題?

回答

27

如果您使用標籤,您的問題有一個簡單的解決方案。

你擁有文件首先標記來表示一個特定的功能需要華廷這樣的:

Feature: Save Proportion Of Sample Pool Required 
    As an <User> 
    I want to <Configure size of the Sample required> 
    so that <I can advise the deployment team of resourcing requirments>. 

    @WatiN 
    Scenario: Save valid sample size mid range 
    Given the user enters 10 as sample size 
    When the user selects save 
    Then the value is stored 

然後裝飾BeforeScenario與指示標記的屬性綁定:

[BeforeScenario("WatiN")] 
public void BeforeScenario() 
{ 
    ... 
} 

此BeforeScenario方法然後將只爲使用WatiN的功能調用。

3

我原本以爲步驟文件與特定的功能文件相關聯。一旦我意識到這不是真的,它幫助我改進了我的所有SpecFlow代碼和功能文件。現在,我的特性文件的語言更少依賴於上下文,這導致了更多可重用的步驟定義和更少的代碼重複。現在我按照一般的相似性來組織我的步驟文件,而不是根據它們的功能。據我所知,沒有辦法將一個步驟與特定功能相關聯,但我不是SpecFlow專家,所以請不要對此表示贊同。

如果您仍希望將步驟文件與特定功能文件關聯起來,只需給它們類似的名稱即可。即使步代碼僅對該功能有意義,也不需要強制只爲該功能工作。這是因爲即使您碰巧爲其他功能創建了重複步驟,它也會將此檢測爲模糊匹配。模糊匹配的行爲可以在App.config文件中指定。有關App.config文件的更多詳細信息,請參閱 http://cloud.github.com/downloads/techtalk/SpecFlow/SpecFlow%20Guide.pdf 。默認情況下,模糊匹配被檢測到並報告爲錯誤。

[編輯]: 實際上,這樣工作時出現問題(步驟文件只與您的頭腦中的特徵文件關聯)。當您添加或修改一個.feature文件並使用之前使用過的相同措辭時,會出現問題,並且您忘記爲其添加步驟,但是您沒有注意到這一點,因爲您之前已經爲此措辭創建了一個步驟,並且它是以一種上下文敏感的方式編寫的。此外,我不再相信步驟文件與特徵文件關聯的有用性。我不認爲大多數客戶會很擅長以獨立於上下文的方式編寫規範。這不是我們通常會寫或談或想的方式。

15

當前(在SpecFlow 1.3中)步驟定義是全局的,不能將範圍限定爲特定功能。

這是通過設計具有與黃瓜相同的行爲。

我問同樣的問題在黃瓜組:

http://groups.google.com/group/cukes/browse_thread/thread/20cd7e1db0a4bdaf/fd668f7346984df9#fd668f7346984df9

基線是,所有的功能文件中定義的語言也應該是全球性的(整個應用程序的一個全球性的行爲)。因此應該避免對特徵進行範圍界定。我個人還沒有完全相信這個...

但是你的問題,只爲需要的用戶界面,集成可以通過兩種不同的方式來解決的方案開始華廷:

8

檢查了這一點(在SpecFlow 1.4的新功能):https://github.com/techtalk/SpecFlow/wiki/Scoped-Bindings

+0

在1.7.0它似乎是StepScope屬性。例如[StepScope(Tag =「mytag」)] – ziya 2011-08-04 08:29:35

+0

鏈接已死。 – Cumbayah 2011-11-22 21:02:02

+1

新的鏈接是https://github.com/techtalk/SpecFlow/wiki/Scoped-Bindings – Ecyrb 2011-12-08 20:52:41

0

還要考慮使用與實現無關的DSL與具體實施步驟的定義。例如,使用

When I search for 'Barbados'

,而不是

'當我在搜索欄中鍵入 '巴巴多斯' 並按下搜索按鈕

通過實施多步驟定義程序集,相同的場景可以通過不同的接口執行。我們使用這種方法使用相同的場景來測試UI,API等。

1

解決方案是爲了實現標籤&作用域綁定與Web相關的測試場景或與代碼中的控制器/核心邏輯相關的測試場景。

,並深入每個方案的任何之前下面提到的範圍/執行後

BeforeTestRunScenario 
    BeforeFeature 
     BeforeScenario 
      BeforeScenarioBlock 
       BeforeStep 
       AfterStep 
      AfterScenarioBlock 
     AfterScenario 
    AfterFeature 
AfterTestRunScenario