Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven 如何在cucumber for next than语句中忽略失败/跳过语句_Maven_Cucumber_Cucumber Jvm_Cucumber Java_Cucumber Junit - Fatal编程技术网

Maven 如何在cucumber for next than语句中忽略失败/跳过语句

Maven 如何在cucumber for next than语句中忽略失败/跳过语句,maven,cucumber,cucumber-jvm,cucumber-java,cucumber-junit,Maven,Cucumber,Cucumber Jvm,Cucumber Java,Cucumber Junit,在cucumber中,假设我的one than语句失败,那么cucumber将跳过该场景中的all than语句,并开始执行下一个场景。。。有没有人能帮助cucumber运行下一步而不跳过该场景中除语句之外的所有语句。。我们有相同的规定吗 我正在用cucumber、maven和java这是一个糟糕的做法。如果您需要这样的东西,这只意味着您的Cumber场景编写不正确 话虽如此,如果有一个步骤预计会失败,但它的失败并不意味着整个场景的失败,那么您必须在您的粘合代码中实现某种“故障保护”解决方案。例

在cucumber中,假设我的one than语句失败,那么cucumber将跳过该场景中的all than语句,并开始执行下一个场景。。。有没有人能帮助cucumber运行下一步而不跳过该场景中除语句之外的所有语句。。我们有相同的规定吗


我正在用cucumber、maven和java

这是一个糟糕的做法。如果您需要这样的东西,这只意味着您的Cumber场景编写不正确

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


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

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

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


在这种情况下,正确使用该工具取决于您。Cucumber不会帮你做蠢事的

您可以使用try---catch块处理它,也可以使用软断言
软断言是一种断言类型,当断言失败时不会引发异常,并在断言语句之后继续执行下一步。
当我们的测试要求执行多个断言,并且用户希望在失败/跳过断言之前执行所有断言/代码时,通常使用软断言测试。
AssertJ库提供了流畅的断言。它与Hamcrest非常相似,默认情况下,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”);
 }
}
公共类示例{
@试验
公共void test1(){
SoftAssert sa=新的SoftAssert();
sa.资产真实性(2<1);
System.out.println(“断言失败”);
sa.资产假(1<2);
System.out.println(“断言失败”);
sa.资产质量(“样本”、“失败”);
System.out.println(“断言失败”);
}
}
输出:

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

通过:测试1


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

扩展SachinB答案

我们可以使用assertj来实现同样的目标

我们需要使用它的lib/依赖项,如下所示

    <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <version>3.9.0</version>
    </dependency>
示例代码

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()实现的函数失败,它将提供失败步骤的堆栈跟踪。

嗨Eugene。。。我的then语句由于断言失败而失败,而不是由于任何其他原因。。在这种情况下,我能做些什么并捕获异常在这种情况下是没有帮助的case@ShubhamJain那么,如果真的失败了呢?为什么要继续测试失败的行为?另一方面,如果这个断言不是关键的,那么删除它。没有别的办法了。他们的一些是不依赖于其他的,所以我喜欢继续斯堪里欧。。如果我再扫描一次,浏览器会再次启动,我需要导航到这一点,这是每个浏览器都需要重载的先决条件assert@ShubhamJain失败的断言抛出java.lang.AssertionError。如果发现此错误,您应该继续执行场景中的下一步。但这会将失败的testcase标记为传入报告:(你能举一个软断言的例子吗?你的意思是使用if-else条件吗?那很好…你能在你的回答中提供一些相同的参考URL吗?我会在办公室尝试一下的,现在我不在办公室了…谢谢你宝贵的评论。嗨,SachinB…我尝试了你的建议…首先,软断言sa=new SoftAssert()是org.TestNG.assert类中的一个TestNG类。当我将Junit与cucumber一起使用时,cucumber与TestNG不太兼容。另一件事是org.assertj.core.api lib提供了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) {

  }
 }
}