我在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
代码中读取它。