如何忽略下一个语句的黄瓜中的 failure/skipping 语句
How to ignore failure/skipping statement in cucumber for next than statements
在 Cucumber 中,假设我的一个 than 语句失败,那么我的 all than 语句被那个场景的 cucumber 跳过,它开始执行下一个场景......有没有人有办法帮助 Cucumber 运行 下一个在不跳过该场景的所有其他语句的情况下执行步骤。我们是否有相同的规定?
我正在使用黄瓜,maven java
这是一种不好的做法。如果你有这样的需求,只能说明你的Cucumber场景写的不对。
话虽如此,如果有一个步骤预计会失败,但它的失败并不意味着整个场景的失败,您将不得不在您的粘合代码中实施某种 "failsafe" 解决方法.例如 try...catch
将承认失败的子句,可能会记录它但不会因抛出异常而使场景失败。
黄瓜步骤不应被内部逻辑污染。
如果场景中的一个步骤失败,那么整个场景都会失败。做任何其他事情都会破坏一些测试原则。一旦发生故障,执行后续步骤就没有意义,因为我们没有一致的起点(已经出了问题)
如果您想 运行 单个场景并排除特定步骤,只需将其从场景中删除即可。
在这种情况下,是否正确使用该工具取决于您。 Cucumber 不会帮你做傻事。
您可以使用 try - - - catch 块处理它,也可以使用软断言
Soft Assertions 是一种断言类型,当断言失败时不会抛出异常,并会在 assert 语句之后继续下一步。
这通常在我们的测试需要执行多个断言并且用户想要在 failing/skipping 测试之前要执行的所有 assertions/codes。
AssertJ 是提供 流畅断言 [=33= 的库].它与 Hamcrest 非常相似,后者默认带有 JUnit。连同所有断言,AssertJ 提供软断言及其 SoftAssertions class inside org.assertj.core.api package
考虑以下示例:
public class Sample {
@Test
public void test1() {
SoftAssert sa = new SoftAssert();
sa.assertTrue(2 < 1);
System.out.println(“Assertion Failed”);
sa.assertFalse(1 < 2);
System.out.println(“Assertion Failed”);
sa.assertEquals(“Sample”, “Failed”);
System.out.println(“Assertion Failed”);
}
}
输出:
Assertion Failed
Assertion Failed
Assertion Failed
通过:测试 1
即使现在测试通过而不是失败。这里的问题是当没有抛出异常时测试不会失败。为了达到预期的结果,我们需要在测试结束时调用 assertAll() 方法,该方法将整理所有抛出的异常并在必要时使测试失败。
扩展 SachinB 的答案。
我们可以使用 assertj 来达到同样的效果。
我们需要使用它的lib/dependency如下
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.9.0</version>
</dependency>
您需要创建由 assetj
提供的 SoftAssertions()
对象
您需要导入的包
import org.assertj.core.api.SoftAssertions;
示例代码
public class myclass {
SoftAssertions sa = null;
@Then("^mycucucmberquote$")
public void testCase2() {
sa = new SoftAssertions();
sa.assertThat("a").contains("b");
}
@Then("^mycucucmberquoteLastThen of that scario$")
public void testCase3() {
try {
sa.assertAll();
} catch (Exception e) {
}
}
}
sa.assertAll();
实现的函数失败,它将提供失败步骤的堆栈跟踪。
在 Cucumber 中,假设我的一个 than 语句失败,那么我的 all than 语句被那个场景的 cucumber 跳过,它开始执行下一个场景......有没有人有办法帮助 Cucumber 运行 下一个在不跳过该场景的所有其他语句的情况下执行步骤。我们是否有相同的规定?
我正在使用黄瓜,maven java
这是一种不好的做法。如果你有这样的需求,只能说明你的Cucumber场景写的不对。
话虽如此,如果有一个步骤预计会失败,但它的失败并不意味着整个场景的失败,您将不得不在您的粘合代码中实施某种 "failsafe" 解决方法.例如 try...catch
将承认失败的子句,可能会记录它但不会因抛出异常而使场景失败。
黄瓜步骤不应被内部逻辑污染。
如果场景中的一个步骤失败,那么整个场景都会失败。做任何其他事情都会破坏一些测试原则。一旦发生故障,执行后续步骤就没有意义,因为我们没有一致的起点(已经出了问题)
如果您想 运行 单个场景并排除特定步骤,只需将其从场景中删除即可。
在这种情况下,是否正确使用该工具取决于您。 Cucumber 不会帮你做傻事。
您可以使用 try - - - catch 块处理它,也可以使用软断言
Soft Assertions 是一种断言类型,当断言失败时不会抛出异常,并会在 assert 语句之后继续下一步。
这通常在我们的测试需要执行多个断言并且用户想要在 failing/skipping 测试之前要执行的所有 assertions/codes。
AssertJ 是提供 流畅断言 [=33= 的库].它与 Hamcrest 非常相似,后者默认带有 JUnit。连同所有断言,AssertJ 提供软断言及其 SoftAssertions class inside org.assertj.core.api package
考虑以下示例:
public class Sample {
@Test
public void test1() {
SoftAssert sa = new SoftAssert();
sa.assertTrue(2 < 1);
System.out.println(“Assertion Failed”);
sa.assertFalse(1 < 2);
System.out.println(“Assertion Failed”);
sa.assertEquals(“Sample”, “Failed”);
System.out.println(“Assertion Failed”);
}
}
输出:
Assertion Failed
Assertion Failed
Assertion Failed
通过:测试 1
即使现在测试通过而不是失败。这里的问题是当没有抛出异常时测试不会失败。为了达到预期的结果,我们需要在测试结束时调用 assertAll() 方法,该方法将整理所有抛出的异常并在必要时使测试失败。
扩展 SachinB 的答案。
我们可以使用 assertj 来达到同样的效果。
我们需要使用它的lib/dependency如下
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.9.0</version>
</dependency>
您需要创建由 assetj
提供的SoftAssertions()
对象
您需要导入的包
import org.assertj.core.api.SoftAssertions;
示例代码
public class myclass {
SoftAssertions sa = null;
@Then("^mycucucmberquote$")
public void testCase2() {
sa = new SoftAssertions();
sa.assertThat("a").contains("b");
}
@Then("^mycucucmberquoteLastThen of that scario$")
public void testCase3() {
try {
sa.assertAll();
} catch (Exception e) {
}
}
}
sa.assertAll();
实现的函数失败,它将提供失败步骤的堆栈跟踪。