【问题标题】:How do I use TestNG SkipException?如何使用 TestNG SkipException?
【发布时间】:2021-06-07 16:42:40
【问题描述】:

如何有效地使用 TestNG throw new SkipException()?有人举个例子吗?

我尝试在测试方法开始时抛出此异常,但它破坏了拆卸、设置、方法等,并通过导致一些(不是全部)后续测试也被跳过而造成附带损害,并在 TestNG HTML 报告中显示一堆垃圾。

我使用 TestNG 来运行我的单元测试,并且我已经知道如何使用 @Test 注释的选项来禁用测试。我希望我的测试在我的报告中显示为“存在”,但不计入最终结果。换句话说,如果有一个 @Test 注释选项可以“跳过”测试,那就太好了。这样我就可以将测试标记为忽略排序,而不会使测试从所有测试列表中消失。

在运行@Test 之前是否需要在@BeforeXXX 中抛出“SkipException”?这或许可以解释我所看到的怪异之处。

【问题讨论】:

    标签: unit-testing exception testing testng


    【解决方案1】:

    是的,我的怀疑是正确的。在@Test 中抛出异常不起作用,在@BeforeTest 中也没有抛出异常,而我正在使用并行类。如果您这样做,异常将破坏测试设置,您的 TestNG 报告将在所有相关的 @Configuration 方法中显示异常,甚至可能导致后续测试失败而不会被跳过。

    但是,当我将它放在@BeforeMethod 中时,它可以完美运行。很高兴我能够弄清楚。 documentation of the class 表明它可以在任何 @Configuration 注释方法中工作,但是我正在做的事情不允许我这样做。

    @BeforeMethod
    public void beforeMethod() {
        throw new SkipException("Testing skip.");
    }
    

    【讨论】:

      【解决方案2】:

      我正在使用 TestNG 6.8.1。

      我有几个@Test 方法可以用来抛出SkipException,我没有看到任何奇怪之处。它似乎按预期工作。

      @Test
      public void testAddCategories() throws Exception {
          if (SupportedDbType.HSQL.equals(dbType)) {
              throw new SkipException("Using HSQL will fail this test. aborting...");
          }
      
          ...
      }
      

      Maven 输出:

      Results :
      
      Tests run: 85, Failures: 0, Errors: 0, Skipped: 2
      

      【讨论】:

      • 是的,你的部分正确。仅在 'Test' 或 'BeforeMethod' 注释方法中。在任何其他“配置”方法中,它都会失败。我整理了一个测试所有变体的整个项目,您可以分叉它并自己尝试:djangofan.github.io/testng-custom-report-example
      • 什么是“其他配置”方法?
      • 在 TestNG 中,配置方法是使用 Before 或 After 注释进行注释的方法。因此,“其他配置方法”是指使用 BeforeClass、BeforeTest、BeforeSuite 或任何 After 注释进行注释的方法。
      【解决方案3】:

      在使用 DataProvider 使用 Apache POI 创建单独检查 @BeforeTest 进行空测试时,我们可以跳过数据库为空或在这种情况下为空,我们可以使用此跳过测试与行检查是否为空,使用布尔真检查然后跳过预期不去全面检查其是否有 1000 个输入检查,而不是跳过该数据提供者为空...

      【讨论】:

        【解决方案4】:

        要从@Test 注释选项中跳过测试用例,您可以使用带有@Test 注释的'enable=false' 属性,如下所示

        @Test(enable=false)
        

        这将跳过测试用例而不运行它。但其他测试、设置和拆卸将毫无问题地运行。

        【讨论】:

        • 我的问题是要求“真正的跳过”,而不是禁用,以便跳过的报告仍然显示在我的报告中。
        • 这提醒了我为什么需要写一个新的记者/跑步者。 Enabled=false 不应“不被报告”
        • Op 在运行时要求跳过。
        猜你喜欢
        • 2021-07-10
        • 1970-01-01
        • 2014-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-12
        • 2019-01-22
        • 1970-01-01
        相关资源
        最近更新 更多