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



我在java bdd中有以下场景:

  • 一个将创建一些数据的标签:@Before,它将在运行测试步骤之前创建一些数据
  • 带有步骤的测试用例:具有标签@DeleteData的Scenario
  • 将删除数据的标签后@After("@DeleteData)

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

**预期:**不要运行@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");
});

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

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

因此,如果您的场景以任何不同的状态完成,那么里面的代码将不会执行。

After代码应始终运行。无论哪个步骤运行或失败,它都应该能够运行。

要做到这一点,您可能需要在适当的步骤中设置一个类似hasSucceeded(类变量(的标志,并从After代码中读取它。

最新更新