Java:@AfterStep、@BeforeStep 在 cucumber 中不起作用

标签 java cucumber

在我的 Java 和 Maven 项目中,我使用 Cucumber 进行 BDD 测试。
这是我使用的依赖项:

    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-java</artifactId>
        <version>4.2.0</version>
    </dependency>

我的Hooks类:

import cucumber.api.java.After;
import cucumber.api.java.Before;
import cucumber.api.java.AfterStep;
import cucumber.api.java.BeforeStep;


public class Hooks  {

    @Before
    public void init() {
        System.out.println( " Before Scenario " );
    }

    @After
    public void cleanUp() {
        System.out.println( " After Scenario " );
    }


    @BeforeStep
    public void beforeStep() {
        System.out.println("======>  This is before step  <======");
        //Do something before executing the step
    }

    @AfterStep
    public void afterStep() {
        System.out.println("======>  This is after step  <======");

    }
}

但是当我运行 cucumber 测试时,它只打印Before ScenarioAfter Scenario同时,我希望看到,这是步骤之前,以及这是步骤之后 每个步骤之前之后

那么,为什么@AfterStep@BeforeStep不起作用?

最佳答案

  • 您应该提供一个小示例,其他人可以使用它来重现您的问题

看看这个正在运行的小片段

假设以下结构

pom.xml
src/test/java/TestRunner.java
src/test/java/stepdefs/StepDefinitions.java
src/test/java/stepdefs/Hooks.java
src/test/resource/features/demo.feature

pom.xml

...
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.target>1.8</maven.compiler.target>
    <version.cucumber>4.2.0</version.cucumber>
</properties>

<dependencies>
    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-java</artifactId>
        <version>${version.cucumber}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-junit</artifactId>
        <version>${version.cucumber}</version>
        <scope>test</scope>
    </dependency>
</dependencies>
...

TestRunner.java

import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;

@RunWith(Cucumber.class)
@CucumberOptions(
        features = {"src/test/resource/features"},
        glue = {"stepdefs"}
         )
public class TestRunner {
}

StepDefinitions.java

package stepdefs;

import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;

public class StepDefinitions {
    @Given("^a successful step$")
    public void aSuccessfulStep() {
        System.out.println("    aSuccessfulStep()");
    }

    @When("doing something")
    public void doingSomething() {
        System.out.println("    doingSomething()");
    }

    @Then("something happen")
    public void somethingHappen() {
        System.out.println("    somethingHappen()");
    }
}

Hooks.java

package stepdefs;

import cucumber.api.java.After;
import cucumber.api.java.AfterStep;
import cucumber.api.java.Before;
import cucumber.api.java.BeforeStep;

public class Hooks {
    @Before
    public void init() {
        System.out.println("@Before scenario");
    }

    @After
    public void cleanUp() {
        System.out.println("@After scenario");
    }

    @BeforeStep
    public void beforeStep() {
        System.out.println("  @BeforeStep");
    }

    @AfterStep
    public void afterStep() {
        System.out.println("  @AfterStep");
    }
}

演示.功能

Feature: Test cucumber reporting plugin

  Scenario: Run a non failing scenario
    Given a successful step
    When doing something
    Then something happen

运行测试

$ mvn clean test

产生以下输出

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running TestRunner
@Before scenario
  @BeforeStep
    aSuccessfulStep()
  @AfterStep
  @BeforeStep
    doingSomething()
  @AfterStep
  @BeforeStep
    somethingHappen()
  @AfterStep
@After scenario

1 Scenarios (1 passed)
3 Steps (3 passed)

关于Java:@AfterStep、@BeforeStep 在 cucumber 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53719701/

相关文章:

gradle - cucumber 验收测试表失败

cucumber - 在 cucumber 的特征文件中传递对象的名称和列表

java - 检查数组中是否存在字符串

java - 运行时错误: inflating class

java - 无法创建匿名对象

ruby-on-rails - 如何插入可预测的 ID 以使用 ActiveRecord 进行测试

cucumber - Gherkin 语法中的数组占位符

java - 无法使用应用程序中的 hsqldb 连接,但单元测试工作

java - 如何获取 indexOf 多个分隔符?

java - 可读和可维护的验收测试框架