如何使用Cucumber中的Java将实现步骤从一步定义调用到其他步骤定义

时间:2017-03-03 13:47:01

标签: java selenium cucumber

我试图在下面的步骤定义实现中调用

@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);

    }

来自下面的另一个步骤定义实现:

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

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

    }

我无法做到,无论如何我能做到吗?

3 个答案:

答案 0 :(得分:3)

@ 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
    }
}

最大的区别是我将登录逻辑解压缩到辅助类中的方法。这允许我编写易于理解的单行步骤。

我将帮助器方法移动到另一个类,以确保无论你从哪个步骤类调用它都很容易掌握。

答案 1 :(得分:2)

解决方案不是这样做的。

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

答案 2 :(得分: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")
}

请记住,即使我们使用Given / When / Then,这些仍然只是方法,可以用作方法。