0

我正在使用 cucumber-jvm 编写测试,我希望系统在第一个失败的场景中停止运行测试。我找到了为 Cucumber Ruby 编写的示例代码,它通过 After 挂钩执行此操作。我正在寻找正确的 java 类和调用方法,这相当于在 Ruby 中设置 Cucumber.wants_to_quit = true。

这是我的示例代码:

@After
public void quitOnErrors(Scenario scenario) {
    if (scenario.isFailed()) {
                    // Need the correct class/method/property to call here.
        cucumber.api.junit.Cucumber.wants_to_quit = true;   
    }
}    
4

3 回答 3

1

我找不到使用 Cucumber-JVM 本地执行此操作的任何方法,但您始终可以这样做:

static boolean prevScenarioFailed = false;

@Before
public void setup() throws Exception {
    if (prevScenarioFailed) {
        throw new IllegalStateException("Previous scenario failed!");
    }
    // rest of your setup
}

@After
public void teardown(Scenario scenario) throws Exception {
    prevScenarioFailed = scenario.isFailed();
    // rest of your teardown
}
于 2013-04-11T07:21:05.180 回答
0

cucumber-jvm 在第一次测试失败时退出的公认答案使用

throw new IllegalStateException()

在我的经验中不起作用。

请尝试使用 cucumber 命令行开关-y

我没有找到任何硬性文档-y,但在此处提出了建议,并且在那次对话中的开发人员致力于实现它。我已经对其进行了测试,并且可以按预期工作。

我还没有找到 cucumber-jvm 版本,Cucumber.wants_to_quit?但也许这将涵盖您的用例。

于 2015-04-09T03:01:50.637 回答
0

在步骤定义文件中创建黄瓜钩子有助于在场景失败后停止测试。这涉及创建@Before@After方法。看看这个例子:

@Before
  public void setUp() {
    if (prevScenarioFailed) {
      throw new IllegalStateException("Previous scenario failed!");
    }


  }

  @After()
  public void stopExecutionAfterFailure(Scenario scenario) {
    prevScenarioFailed = scenario.isFailed();
  }
于 2019-11-06T10:48:42.033 回答