【问题标题】:@Test failed when calling method has softassert fails@Test failed 当调用方法有 softassert 失败
【发布时间】:2019-01-19 21:58:01
【问题描述】:

软断言未能从父类继续测试用例:

在下面的测试中,第二种方法AssertTesting.softassert()在软断言失败的情况下完成,但是在第二种方法之后运行停止了。我想从父类执行第三个方法AssertTesting.softassert2()。任何其他我可以使用软断言的方式,所以我可以继续执行

            package Assertion;

        import org.testng.annotations.Test;

        public class AssertTestingAll 
        {
            @Test
            public void callallAssert()
            {
                AssertTesting.Hardassert();
                AssertTesting.softassert();
                AssertTesting.softassert2();
            }

        }



    package Assertion;

    import org.junit.Assert;
    import org.testng.annotations.Test;
    import org.testng.asserts.SoftAssert;

    public class AssertTesting 
    {
        static SoftAssert sa=new SoftAssert();


      public static void Hardassert() 
      {

    //    Assert.fail("Assertion fail");

          Assert.assertEquals("strings dont match:", "Test", "Test");

          {
          String [] name1= {"jeeva","balan","madhu"};

          String [] name2= {"jeeva","balan","madhu"};

          Assert.assertArrayEquals("name does not match", name1, name2);
          }


          Assert.assertFalse("numbers does not matches ", 2<2);

          Assert.assertSame("jeeva", "jeeva");



      }

      public static void softassert()
      {
          sa.assertEquals("strings dont match:", "Test1", "Test");

          {
          String [] name1= {"jeeva","balan","madhu"};

          String [] name2= {"jeeva","balan","madhu"};


          Assert.assertArrayEquals("name does not match", name1, name2);
          }
          System.out.println("execution continued");

          sa.assertFalse(2<2,"numbers does not matches ");

          sa.assertSame("jeeva", "jeeva1");
          sa.assertAll();

      }


      public static void softassert2()
      {
          sa.assertEquals("strings dont match:", "Test1", "Test");

          {
          String [] name1= {"jeeva","balan","madhu"};

          String [] name2= {"jeeva","balan","madhu"};


          Assert.assertArrayEquals("name does not match", name1, name2);
          }
          System.out.println("execution continued");

          sa.assertFalse(2<2,"numbers does not matches ");

          sa.assertSame("jeeva", "jeeva1");
          sa.assertAll();

      }

    }

【问题讨论】:

  • 你期待这个:sa.assertFalse(2

标签: java selenium testng assertions


【解决方案1】:

SoftAssert 的方法如assertEqualsassertFalse 仅记录条件是否正常,并且它们不会向TestNG runner 抛出任何表明测试失败的异常。实际的检查和异常抛出发生在assertAll 方法中。

这解释了您收到此错误的原因。 softassert 方法运行 assertAll 会引发异常,并且测试会在此时停止执行。

如果您希望测试继续进行,您需要对所有测试使用相同的 SoftAssert 实例,并在整个测试结束时运行 assertAll

【讨论】:

  • //如果您希望测试继续进行,您需要对所有测试使用相同的 SoftAssert 实例并在整个测试的最后运行 assertAll。// 这有效,我已经启动了 softassert 类在父类中并在父类方法中结束 softassert all。在父类方法中继续执行所有方法对象并列出所有错误和执行完成。
【解决方案2】:

softassert() 中的一个断言,因此当您在方法末尾使用sa.assertAll(); 时,会引发异常。来自docs

当一个断言失败时,不要抛出异常,而是记录 失败。调用 assertAll() 将导致抛出异常,如果 至少有一个断言失败。

如果您想在任何断言失败的情况下使测试失败,请在测试结束时调用assertAll();

【讨论】:

    猜你喜欢
    • 2017-09-05
    • 2018-06-08
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 2011-09-10
    • 1970-01-01
    • 2016-06-09
    相关资源
    最近更新 更多