Dynamic Data Providers

Here is the example that explains how we can pass the data based upon method type. In below example, 2 different test methods use same data provider. At run time, Data provider returns the data based upon method name.

package org.softpost;

import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

import java.lang.reflect.Method;

public class DataProviders1 {

    @Test(dataProvider = "dataset")
    public void verifyNumbersLength(int number, int expected) {
        Assert.assertEquals(String.valueOf(number).length(),expected);
    }

    @Test(dataProvider = "dataset")
    public void verifyStringLength(String sample, int expected) {
        Assert.assertEquals(sample.length(), expected);
    }

    @DataProvider(name = "dataset")
    public Object[][] provideData(Method method) {

        Object[][] result = null;

        if (method.getName().equalsIgnoreCase("verifyNumbersLength")) {
            result = new Object[][] {
                    { 120, 3 },
                    { 11, 2 }
            };
        } else if (method.getName().equalsIgnoreCase("verifyStringLength")) {
            result = new Object[][] {
                    { "softpost", 8 },
                    { "watson", 6 }
            };
        }

        return result;

    }

}

You may also like...