如果断言失败,不要 运行 @After("@tag") 挂钩
Do not run @After("@tag") hook if assertion fails
我在 java bdd 中有以下场景:
- 将创建一些数据的标签:
@Before
将在 运行测试步骤 之前创建一些数据
- 具有以下步骤的测试用例:
Scenario
具有标记 @DeleteData
- 在将删除数据的标签之后
@After("@DeleteData)
**实际:** @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
}
}
因此,如果您的场景以任何不同的状态完成,则内部代码将不会执行。
我在 java bdd 中有以下场景:
- 将创建一些数据的标签:
@Before
将在 运行测试步骤 之前创建一些数据
- 具有以下步骤的测试用例:
Scenario
具有标记 @DeleteData - 在将删除数据的标签之后
@After("@DeleteData)
**实际:** @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
}
}
因此,如果您的场景以任何不同的状态完成,则内部代码将不会执行。