java TestNG在@DataProvider方法中引发Exception后跳过测试

nfzehxib  于 2023-05-12  发布在  Java
关注(0)|答案(2)|浏览(188)

我有点糊涂了。
如何让TestNG报告测试错误?

// ...
@DataProvider(name = "foo")
public Object[][] provideData () {
    throw new SomeRuntimeException("Some error occurred. The test configuration "
            + "is somehow incorrect.");
}

这只会导致测试跳级。异常甚至不会被记录。将其移动到构造函数中只会记录异常,但这还不够……
我想要一个大脂肪错误消息。
目前,使用专用的(自)测试方法至少可以显示一些测试失败…
无论如何,如果能知道testNG对错误的定义是什么样子的,那就太好了。
谢谢你的任何提示!

68bkxrlz

68bkxrlz1#

以下是文章,其中提出了公平的一套替代方案,并有足够详细的解释:
Fail instead of Skip a Test when TestNG’s DataProvider throws an Exception
对我来说,最好的方法是为数据提供者添加测试,下面是这个想法的简要说明:

public class MyClass {

    @DataProvider(name = "my-data-provider")
    private Object [][] myProvider() {
        // ...
    }

    @Test
    public void testDataProviders() {
        Assert.assertTrue(myProvider().length > 0);
    }

    @Test
    // ... Real tests.

}
wz3gfoph

wz3gfoph2#

今天,TestNG的最新版本允许用户显式地告诉TestNG运行器将DataProvider异常视为Failures。
如果您正在以编程方式运行TestNG,可以这样做-

TestNG tng = new TestNG();
tng.propagateDataProviderFailureAsTestFailure();

如果您按照惯例运行TestNG,您还可以在DataProvider注解上设置属性,如下所示-

@DataProvider(name = "DataProviderName", propagateFailureAsTestFailure = true)
    public Object[][] dataProviderMethod(){
        return new Object[][]{{"row1-column1", "row1-column2"},
                {"row2-column1", "row2-column2"}};
    }

参考:

https://github.com/testng-team/testng/issues/217

相关问题