如何忽略黄瓜中的语句失败/跳过语句

时间:2018-01-31 17:07:29

标签: maven cucumber cucumber-jvm cucumber-java cucumber-junit

在黄瓜中假设我的一个声明失败然后我的全部声明被黄瓜跳过那个场景并且它开始执行下一个场景...有没有人有办法协助黄瓜运行下一步而不跳过除了该场景的声明..我们有相同的规定吗?

我正在使用黄瓜,maven和java

4 个答案:

答案 0 :(得分:2)

这是一种不好的做法。如果您需要这样的东西,那只意味着您的黄瓜方案编写不正确。

话虽如此,如果有一个预期失败的步骤,但它的失败并不意味着整个场景的失败,那么你必须在你的粘合代码中实现某种“故障安全”的解决方法。例如,try...catch子句将确认失败,可能会记录它,但不会因为抛出异常而使场景失败。

黄瓜步骤不应该被内部逻辑污染。

答案 1 :(得分:1)

如果方案中的某个步骤失败,则整个方案将失败。做任何其他事情都会破坏几个测试原则。一旦发生故障,执行后续步骤就没有意义,因为我们没有一致的起点(某些事情已经出错)

如果要运行单个方案并排除特定步骤,只需将其从方案中删除即可。

在这种情况下,您可以正确使用该工具。黄瓜不会帮助你用它做蠢事。

答案 2 :(得分:1)

您可以使用try - - - catch块处理它,也可以使用软断言
软断言是断言的类型,当断言失败时不会抛出异常,并且在断言语句之后将继续执行下一步。
这通常在我们的测试需要执行多个断言并且用户想要所有断言时使用在失败/跳过测试之前要执行的断言/代码。
AssertJ 是提供流畅断言的库。它与Hamcrest非常相似,默认情况下是 JUnit 。除了所有断言之外,AssertJ在 org.assertj.core.api 包中提供了 SoftAssertions 类的软断言

考虑以下示例:

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”);
 }
}

<强>输出:

  

断言失败因断言失败
断言失败

PASSED:test1

即使现在测试通过而不是失败。这里的问题是当没有抛出异常时测试不会失败。为了达到预期的结果,我们需要在测试结束时调用 assertAll()方法,该方法将整理所有抛出的异常并在必要时使测试失败。

答案 3 :(得分:0)

扩展SachinB答案。

我们可以使用断言来实现相同的目标。

我们需要使用它的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();已实现的函数失败,它将提供失败步骤的堆栈跟踪。