获取父类中dataprovider方法抛出的异常

问题描述 投票:0回答:1

我有一个扩展 CommonTest 类的 TestClass,在测试类的@Dataprovider 中有一个方法 doSomething() 失败了。我想在@AfterClass 中捕获堆栈跟踪而不在@Dataprovider 中使用 try/catch

class CommonTest {

    @AfterClass
    captureFailures() {
    }

}

class TestClass {

    @DataProvider
    sampleMethod() {

        CommonUtils.doSomething()

    }

}

class CommonUtils {

    doSomething()

}
java testng
1个回答
0
投票

不使用try/catch捕获

@DataProvider
中失败方法的stacktrace,可以使用TestNG提供的
ITestResult
对象。这是
captureFailures()
类中
CommonTest
方法的示例实现:


    @Dataprovider
    class CommonTest {
        private static List<Throwable> failures = new ArrayList<>();
    
        @AfterMethod
        public void afterMethod(ITestResult result) {
            if (result.getStatus() == ITestResult.FAILURE) {
                failures.add(result.getThrowable());
            }
        }
    
        @AfterClass
        public void captureFailures() {
            if (!failures.isEmpty()) {
                System.out.println("Failures captured in @DataProvider:");
                for (Throwable failure : failures) {
                    failure.printStackTrace();
                }
            }
        }
    }
    
    class TestClass extends CommonTest {
        @DataProvider
        public Object[][] sampleMethod() {
            CommonUtils.doSomething();
            return new Object[][]{{}};
        }
    }
    
    class CommonUtils {
        public static void doSomething() {
            throw new RuntimeException("Failed to do something");
        }
    }

在此实现中,我们使用

ArrayList
来存储由
Throwable
方法捕获的任何
afterMethod()
对象。在每个测试方法之后调用此方法,包括用
@DataProvider
注释的方法。如果测试结果失败,我们将
Throwable
对象添加到
failures
列表中。

captureFailures()
方法中,我们检查
failures
列表是否不为空。如果有任何失败,我们打印出列表中每个
Throwable
对象的堆栈跟踪。

请注意,我们还对

CommonTest
类进行了抽象,并在
TestClass
类中对其进行了扩展。这是因为我们要使用
afterMethod()
类中的
CommonTest
方法来捕获
@DataProvider
类的
TestClass
方法中的失败。

© www.soinside.com 2019 - 2024. All rights reserved.