Why is throw new SkipException() skipping all my methods?

我的未来我决定 提交于 2021-02-10 06:53:29

问题


Why is throw new SkipException() skipping all my methods across all classes?

  1. Class one has a method which fails therefore the remaining methods in that class are skipped and the skipcounter is set to 0.
  2. Class two should execute all methods and all methods should pass in class two because the skip counter was set to 0 and after class one was executed.

The following code seems to skip all methods even though there is only one assert.fail which is contained in class one?

Test Base:

import org.testng.annotations.BeforeMethod;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.ITestResult;
import org.testng.SkipException;

  public class TestBase {
        static int numb = 0;
      @BeforeMethod
      public void beforeMethod() {
          if(numb == 1) {
                throw new SkipException("Skipping this test");
          }  
      }

      @AfterMethod
      public void afterMethod(ITestResult testResult) {
            if (testResult.getStatus() == ITestResult.FAILURE) {
                numb = 1;
            }
      }

      @BeforeClass
      public void beforeClass() {
          TestBase.numb = 0;
      }

Test1:

import org.testng.annotations.Test;

public class Test1 extends TestBase {
    @Test(priority = 1)
    public void test1() throws Exception {
        Assert.fail();
    }

    @Test(priority = 2)
    public void test2() throws Exception {
        System.out.println("method2");
    }

    @Test(priority = 3)
    public void test3() throws Exception {
        System.out.println("method3");
    }
}

Test2:

import org.testng.annotations.Test;

public class Test2 extends TestBase {
    @Test(priority = 1)
    public void test1() throws Exception {
        System.out.println("method4");
    }

    @Test(priority = 2)
    public void test2() throws Exception {
        System.out.println("method5");
    }

    @Test(priority = 3)
    public void test3() throws Exception {
        System.out.println("method6");
    }
}

Console output:

..
... TestNG 6.9.10 by Cédric Beust (cedric@beust.com)
...

[TestNG] Running:
  C:\Users\Gianni.Bruno\Desktop\BuyAGiftFramework\BuyAGiftFramework\Test.xml

[TestRunner] Starting executor for test BuyAGift Automation Tests with time out:2147483647 milliseconds.
SKIPPED CONFIGURATION: @BeforeMethod beforeMethod
SKIPPED CONFIGURATION: @AfterMethod afterMethod
SKIPPED CONFIGURATION: @BeforeMethod beforeMethod
SKIPPED CONFIGURATION: @AfterMethod afterMethod
SKIPPED CONFIGURATION: @BeforeClass beforeClass
SKIPPED CONFIGURATION: @BeforeMethod beforeMethod
SKIPPED CONFIGURATION: @AfterMethod afterMethod
SKIPPED CONFIGURATION: @BeforeMethod beforeMethod
SKIPPED CONFIGURATION: @AfterMethod afterMethod
SKIPPED CONFIGURATION: @BeforeMethod beforeMethod
SKIPPED CONFIGURATION: @AfterMethod afterMethod
FAILED: test1
junit.framework.AssertionFailedError
    at junit.framework.Assert.fail(Assert.java:47)
    at junit.framework.Assert.fail(Assert.java:53)
    at BuyAGiftFramework.test.Test1.test1(Test1.java:9)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:643)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:820)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1128)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

SKIPPED: test2
SKIPPED: test3
SKIPPED: test1
SKIPPED: test2
SKIPPED: test3

===============================================
    BuyAGift Automation Tests
    Tests run: 6, Failures: 1, Skips: 5
    Configuration Failures: 0, Skips: 11
===============================================


===============================================
BuyAGift_Automation_Scripts_by_GBruno
Total tests run: 6, Failures: 1, Skips: 5
Configuration Failures: 0, Skips: 11
===============================================

[TestNG] Time taken by org.testng.reporters.JUnitReportReporter@366e2eef: 14 ms
[TestNG] Time taken by org.testng.reporters.XMLReporter@1936f0f5: 16 ms
[TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@3f2a3a5: 32 ms
[TestNG] Time taken by org.testng.reporters.jq.Main@614c5515: 94 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 16 ms
[TestNG] Time taken by org.testng.reporters.EmailableReporter2@6537cf78: 19 ms

Test Execution XML:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Automation_Scripts_by_GB" verbose="2" parallel="classes" thread-count="1">

    <test name="BuyAGift Automation Tests">
        <packages>
            <package name="BuyAGiftFramework.test.*"></package>
        </packages>
    </test>
</suite>

回答1:


default behaviour for configFailurePolicy is "skip". Because if you get exception in configuration method then there is not need to run your test. But if you want to run your test anyway, change this configuration to "continue" It could be achieved by updating configuration

  <suite name="SuiteName" parallel="tests" thread-count="1" verbose="10" configfailurepolicy="continue">


来源:https://stackoverflow.com/questions/46888283/why-is-throw-new-skipexception-skipping-all-my-methods

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!