2011-02-16 67 views
5

我有三個版本的後端,我正在測試。我想對這三個版本運行類似的功能規格。黃瓜:如何組織一個複雜的測試集

起初,我以爲我只是組織一切的目錄結構,因爲這樣的:

features/ 
    v1/ 
    something.feature 
    step_definitions/ 
     something_steps.rb 
    v2/ 
    something.feature 
    step_definitions/ 
     something_steps.rb 
    v3/ 
    something.feature 
    step_definitions/ 
     something_steps.rb 

然而,黃瓜,似乎一切都變平,這意味着我結束了模棱兩可的步驟定義。

我當時以爲以下結構:

features/ 
    v1/ 
    something.feature 
    v2/ 
    something.feature 
    v3/ 
    something.feature 
    step_definitions/ 
    something_steps.rb 

我定義某處特徵文件的變量,表示是哪個版本,一個是對的,我就會有一大堆的「如果」的在步驟文件中,根據該版本變量選擇代碼路徑。但是,我還沒有找到在特徵文件中定義該變量的明顯方法。

有沒有什麼辦法可以組織東西,還是我只需要創建多個「特徵」根,每個版本一個,這將是一個可怕的解決方案,因爲這將意味着多次調用黃瓜?

v1/ 
    features/ 
    something.feature 
    step_definitions/ 
     something_steps.rb 
v2/ 
    features/ 
    something.feature 
    step_definitions/ 
     something_steps.rb 
v3/ 
    features/ 
    something.feature 
    step_definitions/ 
     something_steps.rb 
+0

無恥的插件 - 我實際上寫了一個gem來幫助確切的情況:https://github.com/jmerrifield/cuke_iterations – 2011-09-07 15:23:59

回答

6

爲什麼多次調用黃瓜是壞事?就我個人而言,我就是這麼做的,並且運行Rakefile中的所有三個特性,所以我不必一個接一個地做。另外,如果衝突太大以致於您正在爲每個版本重寫整個步驟定義,也許您應該重新考慮如何對它們進行表述。如果代碼如此不同,你是否應該將它描述爲做同樣的事情?

如果變化較小,那麼我會建議看着tagshooks來實現你想要的。

所以你有可能是這樣的:

@v1 
Feature: some feature 
    In order to test different versions 
    As a cucumber user 
    I want to be able to change step definitions based on what version feature is running 

    Scenario: some scenario 
    Given some thing 
    When I pass some method 
    Then I should get something 

而且你的步驟定義可能是這樣的:

Before('@v1') do 
    Thing = V1Thing 
    VERSION = 1 
end 

Given /^some thing&/ do 
    @thing = Thing.new 
end 

When /^I pass some method$/ do 
    @thing.some_action! 
end 

Then /^I should get something$/ 
    thing = "something" if VERSION == 1 
    thing = "something else" if VERSION == 2 
    @thing.prop.should == thing 
end 

即使步驟的定義有很大的不同,您可以使用此方法,但我認爲這將很難管理。

+0

多個調用的問題實際上只是能夠將所有結果編譯成一個很好的結果集,爲了持續建造的目的等。你提到的方法是我最終採取的方法,謝謝! – 2011-02-18 17:48:44