gpt4 book ai didi

java - cucumber 4 : Implement Global Hooks

转载 作者:行者123 更新时间:2023-12-02 09:42:26 28 4
gpt4 key购买 nike

我是 Cucumber BDD 测试 v4.1 的新手。

问题:

  1. 如何在 Cucumber 4(DAO、Spring)中实现 before(setup) 方法?

请帮忙。谢谢。

最佳答案

cucumber 钩 – 在哪里使用@Before@Before,在其最基本的用法中,允许您在每个场景之前运行一段代码。通常在 Cucumber 中,我们倾向于在给定语句中执行初始化相关的操作,例如对象初始化、数据设置等。因此,很多人认为没有必要使用 Cucumber 的 @Before。但是您可以使用 @Before 在报告中的条目中添加正在执行的新场景。由于 @Before 始终在每个场景之前运行,因此您可以在报告中使用它来清楚地描述场景何时开始执行。

没有必要在每个功能文件中添加@Before。只需将其添加到任何一个功能文件中,然后让 Cucumber 完成其工作即可。 Cucumber 会找出你保存 @Before 的位置,然后它会在所有场景之前使用它。为了使您的报告更加有用且易于理解,您实际上也可以在报告中编写场景名称。下面给出了 Java 代码 –

@Before
public void before(Scenario scenario) {
System.out.println("------------------------------");
System.out.println("Starting - " + scenario.getName());
System.out.println("------------------------------");
}

Cucumber API提供了一个名为Scenario的接口(interface),使用它你可以获取该类的实例。在上面的代码中,我们刚刚使用了该接口(interface)的 getName() 方法来在日志中打印场景名称。

使用单一场景测试 Hook (示例):

功能文件

Feature: Test Hooks

Scenario: This scenario is to test hooks functionality
Given this is the first step
When this is the second step
Then this is the third step

步骤定义:

package stepDefinition;

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

public class Hooks_Steps {

@Given("^this is the first step$")
public void This_Is_The_First_Step(){
System.out.println("This is the first step");
}

@When("^this is the second step$")
public void This_Is_The_Second_Step(){
System.out.println("This is the second step");
}

@Then("^this is the third step$")
public void This_Is_The_Third_Step(){
System.out.println("This is the third step");
}

}

Hook

package utilities;
import cucumber.api.java.After;
import cucumber.api.java.Before;

public class Hooks {

@Before
public void beforeScenario(){
System.out.println("This will run before the Scenario");
}

@After
public void afterScenario(){
System.out.println("This will run after the Scenario");
}
}

编辑:

Issue #515 中提到的解决方法而其他地方则是在 runner 类中使用 JUnit 的 @BeforeClass@AfterClass 注解,如下所示:

@RunWith(Cucumber.class)
@Cucumber.Options(format = {
"html:target/cucumber-html-report",
"json-pretty:target/cucumber-json-report.json"})
public class HooksTest {

@BeforeClass
public static void setup() {
System.out.println("Ran the before");
}

@AfterClass
public static void teardown() {
System.out.println("Ran the after");
}
}

注意:虽然 @BeforeClass@AfterClass 乍一看可能看起来是最干净的解决方案,但它们使用起来不太实用。仅当 Cucumber-JVM 设置为使用 JUnit 运行程序时,它们才起作用。其他运行程序,例如 TestNG、命令行运行程序和特殊 IDE 运行程序,不会拾取这些钩子(Hook)。它们的方法也必须是静态的,并且无论如何都需要静态变量或单例来共享数据。

to run JUnit test cases from the command line

关于java - cucumber 4 : Implement Global Hooks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56965698/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com