如何在TestNG的数据提供程序中提供对象和字符串

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

我几乎没有独立的TC分组在一起。TC2拥有自己的一些数据,并且还依赖于TC1的某些数据。我无法在数据提供程序中提供对象数组以及字符串。

我尝试通过在数据提供程序中提供对象和字符串的组合。

@DataProvider(name="mydataprovider")
    protected Object[][] dataprovider(){
        Object[][] returnObj = new Object[this.classObject.size()][];
        for(int index=0; index < this.classObject.size(); index++) {
            returnObj[index] = new Object[]{this.classObject.get(index)};
        }
        return new Object[][]{
            {"name","position"}, {returnObj}
    };

    }

@Test(dataProvider="mydataprovider", dependsOnMethods = {"TC1"})
public void testMethod(String name, String position, MyClassData classData) 
{
//Test Steps
}

我正面临数据提供者不匹配的问题org.testng.internal.reflect.MethodMatcherException

java selenium testng testng-dataprovider
1个回答
0
投票

您可以将任何内容传递给方法,这是代码的简化版本。

class MyClassData {
    String abc;
    MyClassData(String abc) {
        this.abc = abc;
    }
    @Override
    public String toString() {
        return "MyClassData [abc=" + abc + "]";
    }

}
@DataProvider(name="mydataprovider")
    protected Object[][] dataprovider(){
        MyClassData[] obj = new MyClassData[2];
        obj[0] = new MyClassData("abc");
        obj[1] = new MyClassData("def");

        return new Object[][]{
            {"name","position", obj}
    };
//If you want to pass one obj as one param then, in which case your test method should accept MyClassData object instead of MyClassData[]
return new Object[][]{
                {"name","position", obj[0]},
                {"name","position", obj[1]},
        };

    }

@Test(dataProvider="mydataprovider")
public void testMethod(String name, String position, MyClassData[] classData) 
{

    System.out.println(name + " " + position + " " + classData[0]);
    System.out.println(name + " " + position + " " + classData[1]);
//Test Steps
}
© www.soinside.com 2019 - 2024. All rights reserved.