TestNG的应用 -- DataProvider

本文介绍了TestNG中@DataProvider的应用,针对将数据驱动和测试方法分别放在不同类时出现的Skip问题进行解析。错误源于未指定数据提供者所在类。官方提供了三种解决方案:1) 在父类写dataProvider供子类引用;2) 同一类中定义dataProvider和测试方法;3) 若在非继承类中,需通过dataProvideClass指定dataProvider所在类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TestNG的@DataProvider应用

先说遇到的问题:

  1. 将数据驱动方法和测试方法写在了两个类中,运行测试方法会被Skip。
    错误代码如下
public class DataTest {
    @Test(dataProvider = "range-provider")
    public void testIsBetween(int n, int lower,int upper, boolean expected)
    {
        System.out.println("Received " + n + " " + lower + "-"+ upper + " expected: " + expected);
    }
}

public class DataProviders {
@DataProvider(name = "range-provider")
    public static Object[][] rangeData() {
        int lower = 5;
        int upper = 10;
        return new Object[][] {
                { lower-1, lower, upper, false },
                { lower, lower, upper, true },
                { lower+1, lower, upper, true },
                { upper, lower, upper, true},
                { upper+1, lower, upper, false },
        };
    }
}

错误原因: 代码中没有指定在哪个类中找数据,在当前类中也找不到这个dataProvider,所以就认为没有测试数据,直接skip了

以下是官方解释:
A @Test method specifies its Data Provider with the dataProvider attribute. This name must correspond to a method on the same class annotated with @DataProvider(name="…") with a matching name.
By default, the data provider will be looked for in the current test class or one of its base classes. If you want to put your data provider in a different class, it needs to be a static method or a class with a non-arg constructor, and you specify the class where it can be found in the dataProviderClass attribute.

根据官方文档,现在有三种方式来解决我们的问题
1、在父类中写dataProvider,然后在子类中引用
2、在同一个类中写dataProvider和测试方法
3、写在非继承关系的两个类中,需要在@DataProvider中指定dataProviderClass,将其指定你写dataProvider的那个类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值