36

我想为每个特定的功能文件指定某些设置和拆卸步骤。我见过允许代码在每个场景之前执行的钩子,以及在每个功能之前执行代码的钩子,但我想指定代码在所有场景针对一个特定功能运行之前和之后运行一次。

这可能吗?

4

4 回答 4

20

你使用黄瓜 jvm 吗?我找到了一篇符合您要求的文章。

http://zsoltfabok.com/blog/2012/09/cucumber-jvm-hooks/

基本上,不要为此使用 JUnit @BeforeClass 和 @AfterClass,因为它们不知道 Cucumber Hook 标签。您希望 Init 和 Teardown 方法仅在某些场景下运行,对吗?

于 2013-12-17T06:24:55.580 回答
19

如果您使用 junit 运行测试。我们使用注释来创建一个单元测试类和一个单独的步骤类。标准的 @Before 东西放在 steps 类中,但 @BeforeClass 注释可以在主单元测试类中使用:

@RunWith(Cucumber.class)
@Cucumber.Options(format = {"json", "<the report file"},
    features = {"<the feature file>"},
    strict = false,
    glue = {"<package with steps classes"})
public class SomeTestIT {
    @BeforeClass
    public static void setUp(){
       ...
    }

    @AfterClass
    public static void tearDown(){
       ...
    }
}
于 2013-09-17T18:27:45.093 回答
4

试试这个 :

在功能文件中:

@tagToIdentifyThatBeginAfterShouldRunForThisFeatureOnly
Feature : My new feature ....

在 Stepdefinitions.java 中

@Before("@tagToIdentifyThatBeginAfterShouldRunForThisFeatureOnly")
public void testStart() throws Throwable {
}

@After("@tagToIdentifyThatBeginAfterShouldRunForThisFeatureOnly")
public void testStart() throws Throwable {
}
于 2015-12-08T08:05:53.870 回答
0

嗯,我的要求和你一样。根据 cucumber-jvm 文档 - Cucumber-JVM 不支持只运行一次挂钩。

因此,我对特定变量采用了空检查方法,该变量是 @Before 在黄瓜步骤挂钩中的结果。像下面的东西。

private String token;
public String getToken(){
     if (token == null) {
        token = CucumberClass.executeMethod();
      }
return token;
}

在上面的示例中,假设 getToken() 方法在任何场景运行之前为您提供了一些所需的令牌,并且您只需要一次令牌。这种方法只会在第一次执行您的方法,即在任何场景开始执行之前它为空时。它还显着减少了执行时间。

于 2021-07-25T08:50:46.010 回答