Ronnie
Ronnie

Reputation: 251

How to provide Object as well as String in the data provider for TestNG

I have few dependent TCs grouped together. The TC2 has some data of its own and also dependent on some of the data from TC1. I am unable to provide an array of Object along with String in the data provider.

I tried by providing a mix of Object and String in data provider.

@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
}

I am facing the issue of Data provider mismatch org.testng.internal.reflect.MethodMatcherException

Upvotes: 1

Views: 1075

Answers (1)

niharika_neo
niharika_neo

Reputation: 8531

You can pass anything to the methods, a simplified version of your code.

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
}

Upvotes: 1

Related Questions