2014-03-27 48 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以及