Cucumber类扩展步骤定义和钩子函数

18

我想在Java中从一个名为"AbstractBase_step"的类进行扩展。因此,我希望有一个类似于钩子的东西:

public abstract class AbstractBase_Steps {
    protected Scenario scenario;
    @Before
    public void background(Scenario scenario) {
        this.scenario = scenario;
    }
}

每当步骤文件被调用时,它被称为:

public abstract class Hello_Steps extends AbstractBase_Steps {
}

当我这么做时,我会得到

cucumber.runtime.CucumberException:不允许扩展定义步骤或钩子的类。Hello_Steps类继承自AbstractBase_Steps类。

有人有什么诀窍吗?

编辑:为了重用相同的步骤定义,我创建了一个新的Common_Steps类,并将其包含在粘合路径中。因此,它的定义可用于测试中的所有功能文件。


我使用“implements”而不是“extends”,遇到了相同的问题。 - Julien Kronegg
3个回答

3

根据我理解,您想要简化步骤的逻辑。以下是解决方案。

1)在此情况下定义一个通用类A,并将其步骤放在通用包(例如co.com.test)中。

2)定义步骤配置以使用基础包。

@CucumberOptions(format = {"pretty", "html:target/html/"},
features = {"src/test/resources/acceptance/general/general.feature"},
glue = {"co.com.test"})

3) 不使用特定步骤从类B继承到A

这将导致在所有包中搜索步骤,并找到公共步骤和特定步骤。


2
唯一的问题在于黄瓜注解使用AOP并创建代理类,因此只需将@Before@After移到具体实现中即可。
public class BaseStepDefinition {
    protected void init(){
        PageFactory.initElements(..);
    }
}

public class MyStepDefinition extends BaseStepDefinition {
    @Before
    @Override
    public void init() {
       super.init();
    }
}

0

您可以在步骤定义中定义您的@Before步骤,然后在基类中添加方法,

我的场景是在每个步骤后在cucumber jvm报告中打印消息并减少复杂性,以下是解决方案,

步骤定义:

   @Before
public void after(Scenario scenario) {
    this.scenario = scenario;
}

基类方法:

public static Scenario scenario;

   public Scenario printResponse_Report(Scenario scenario, String responseStr{
      scenario.write("Response body: \n" +responseStr);
      return scenario;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接