2014-03-27 190 views
7

在Cucumber(紅寶石版本)中,您可以輕鬆地創建call steps from other steps,從而構建分層庫步驟,從而輕鬆實現write the Gherkin feature specifications in the most generic terms如何從另一個步驟調用Cucumber-JVM中的步驟

但是,如何在Cucumber-JVM中執行此操作並不容易,我一直無法找到它的文檔。

讓我清楚我不想直接調用步驟實現函數,因爲我不想知道它的簽名是什麼,也不需要每次執行更改時都改變調用。

相反,我想傳遞一個任意字符串,它將通過正則表達式匹配器並自動找到匹配步驟並執行它。就像引擎運行所有步驟一樣。什麼我希望語法看起來像定義同義詞「註銷」

簡單的例子:

When("user logs out") {() => 
    d.executeScript("logout();") 
} 
When("logout") {() => 
    Step("user logs out") 
} 

回答

3

此功能不黃瓜JVM支持。 (請注意,您在您的問題聯繫起來黃瓜背景資料文檔描述了使用中的步驟步驟爲「反模式」)

從本質上講,我們認爲,黃瓜是一個協作工具和小黃瓜是不是一種編程語言。

你可以看到我們是如何得出here

+0

謝謝你的優秀信息。 –

+2

當然這意味着如果我想定義同義詞,我必須在命名方法中定義實現並使用該方法,當然這需要在它自己的.java文件中包含29行導入和包聲明和類定義等等等等,而不是我的例子中的2行。 –

+0

是的。這是Java編程語言。並且決定不支持調用步驟的步驟,因爲我們已經看到了Gherkin經常被用作編程語言的混亂。 –

1

這個決定要調用的步驟定義中的步驟,繼承cuke4duke.Steps Java中的一個較長的討論

import cuke4duke.StepMother; 
import cuke4duke.Steps; 
import cuke4duke.annotation.I18n.EN.When; 

public class CallingSteps extends Steps { 
    public CallingSteps(StepMother stepMother) { 
     super(stepMother); 
    } 

    @When("^I call another step$") 
    public void iCallAnotherStep() { 
     Given("it is magic"); // This will call a step defined somewhere else. 
    } 
} 

例子: https://github.com/cucumber-attic/cuke4duke/blob/master/examples/java/src/test/java/simple/CallingSteps.java

注: cuke4duke支持scala以及