如果断言失败,不要 运行 @After("@tag") 挂钩

Do not run @After("@tag") hook if assertion fails

我在 java bdd 中有以下场景:

**实际:** @After("DeleteData) 运行s 即使我的 Then 断言失败

**预期:**不要运行 @After("@DeleteData)方法应该删除数据以便调查

有什么帮助可以实现这个目标吗?

@DeleteData
Scenario: 
  Given User is at FB login page
  When User logs in
  Then Success message is displayed: Logged in successfully
Hooks.java 

@Before("DeleteData)
public void before() {
 // Create some data
}

@After("DeleteData)
public void after() {
 // delete data
}
StepFile.java

Given("^User is at FB login page$", () -> {
 // Login logic
});

When("^User logs in$", () -> {
 // Login logic
});

The("^Success message is displayed: (.*)$", (String msg) -> {
 assertThat(msg).isEqualTo("Logged in successfully");
});

预计 After 代码总是 运行。它应该能够 运行 无论哪个步骤 运行 或失败。

为此,您可能想在适当的步骤中设置一个标志,如 hasSucceeded(class 变量),并从 After 代码中读取它。

Cucumber 可以将 Scenario 对象注入到你的钩子方法中。所以你可以这样做:

@After
public void doAfter(Scenario scenario){
    if(scenario.getStatus() == Status.PASSED){
        // Do whatever you should
    }
}

因此,如果您的场景以任何不同的状态完成,则内部代码将不会执行。