如何忽略下一个语句的黄瓜中的 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(); 实现的函数失败,它将提供失败步骤的堆栈跟踪。