2017-03-03 98 views
0

我试图从另一个步骤定义执行以下步骤定义执行如何调用从一个步骤定义实现跨进黄瓜

@Given("^a user is logged into application with \"([^\"]*)\" and \"([^\"]*)\"$") 

public void a_user_is_logged_into_application_with_and(String arg1, String arg2) throws Throwable 
{ 
     open(); 
     login(arg1, arg2); 

    } 

调用像下面使用Java其他一些步骤定义:

@Given("^Run Add Business scenario$") 
    public void run_Add_Business_scenario() { 

     Given("a user is logged into application with 'clfmanager' and 'rules'"); 

    } 

我无法做到这一点,无论如何,我可以做到这一点吗?

+0

你不能在黄瓜中做到这一点,你可以做的是创建另一个步骤,调用这两个功能是有兴趣的。 –

+0

在红宝石中使用黄瓜,很容易做到这一点。我现在熟悉黄瓜Java,但我发现像https://github.com/cucumber/cuke4duke/wiki/Calling-Steps-from-StepDefinitions。希望这可以帮助。 – Chong

+0

很高兴看到细节为什么你不能做你想做的事情。你有错误吗?分享发生的事情的细节有助于获得更好的答案。 –

回答

2

解决方法是不这样做。

你应该做的是创建一个两个步骤都使用的助手类。这是在Cucumber中重复使用和避免重复的方法。

0

编辑:托马斯'提供了一个实际的正确答案。我试图复制问题试图做的事情,而不是修复手头的实际问题。再次感谢托马斯!

托马斯是正确的。为了扩展它,你可以做类似的东西如下:

@Given("Login with username (.+) and password (.+)") 
public void login(String user, String pass){ 
    // Login here 
} 

@Given("Login with defaults") 
public void loginWithDefaults(){ 
    login("defaultUser","defaultPass") 
} 

记住,即使我们使用鉴于/时/然后,这些都还只是方法和可作为方法。

+0

恐怕这个例子是从另一个步骤调用一个步骤的例子。这正是你不应该做的。我会回答为什么。 –

2

@ canpan14表明此解决方案:

@Given("Login with username (.+) and password (.+)") 
public void login(String user, String pass){ 
    // Login here 
} 

@Given("Login with defaults") 
public void loginWithDefaults(){ 
    login("defaultUser","defaultPass") 
} 

不幸的是,这是调用从另一步骤之后的步骤的一个例子。

的解决方案,我崇尚会看起来更象这样:

public class LoginSteps { 

    private LoginHelper loginHelper = new LoginHelper(); 

    @Given("Login with username (.*) and password (.*)") 
    public void login(String user, String pass) { 
     loginHelper.login(user, pass) 
    } 

    @Given("Login with defaults") 
    public void loginWithDefaults() { 
     loginHelper.login("defaultUser", "defaultPass") 
    } 
} 

一个辅助类,可重复使用的逻辑:

public class LoginHelper { 
    public void login(user, pass) { 
     // login logic lives here and can be referenced from multiple steps 
    } 
} 

最大的区别是,我提取登录逻辑的方法在助手类中。这使我可以编写易于理解的单行步骤。

我将辅助方法移到另一个类中,以确保无论从哪个步骤类调用它,都很容易获得。