Slide Ads

Tuesday, July 21, 2009

@DataProvider for parameterized test.

While pulling data values into an XML file can be quite handy, tests occasionally require complex types, which can’t be represented as a String or a primitive value. TestNG handles this scenario with its @DataProvider annotation, which facilitates the mapping of complex parameter types to a test method.

@DataProvider for Vector, String or Integer as parameter

1

2

3

4

5

6


7

8

9

10

11

12

13


14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

import java.util.Vector;

import org.testng.annotations.*;



/**

* TestNG Parameterized Test - Advance

* @author mkyong

*

*/


public class TestNGTest6_2 {





@Test(dataProvider = "Data-Provider-Function")

public void parameterIntTest(Class clzz, String[] number) {

System.out.println("Parameterized Number is : " + number[0]);

System.out.println("Parameterized Number is : " + number[1]);

}



//This function will provide the patameter data

@DataProvider(name = "Data-Provider-Function")

public Object[][] parameterIntTestProvider() {

return new Object[][]{

{Vector.class, new String[] {"java.util.AbstractList", "java.util.AbstractCollection"}},

{String.class, new String[] {"1", "2"}},

{Integer.class, new String[] {"1", "2"}}

};

}





}

Result

Parameterized Number is : java.util.AbstractList
Parameterized Number is : java.util.AbstractCollection
Parameterized Number is : 1
Parameterized Number is : 2
Parameterized Number is : 1
Parameterized Number is : 2
PASSED: parameterIntTest(class java.util.Vector, [Ljava.lang.String;@1016632)
PASSED: parameterIntTest(class java.lang.String, [Ljava.lang.String;@10a6ae2)
PASSED: parameterIntTest(class java.lang.Integer, [Ljava.lang.String;@4a6cbf)

@DataProvider for object as parameter
P.S “TestNGTest6_3_0” is an simple object with just get set method for demo.

1

2

3

4

5

6


7

8

9

10

11

12

13


14

15

16

17

18

19

20

21

22

23

24

25

26

27

/**

* TestNG Parameterized Test - Advance

* @author mkyong

*

*/


public class TestNGTest6_3_0 {



private int number;

private String msg;



public void setNumber(int number){

this.number = number;

}



public int getNumber(){

return this.number;

}



public void setMsg(String msg){

this.msg = msg;

}



public String getMsg(){

return this.msg;

}



}
1

2

3

4

5

6


7

8

9

10

11

12

13


14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

import org.testng.annotations.*;



/**

* TestNG Parameterized Test - Advance

* @author mkyong

*

*/


public class TestNGTest6_3_1 {



@Test(dataProvider = "Data-Provider-Function")

public void parameterIntTest(TestNGTest6_3_0 clzz) {

System.out.println("Parameterized Number is : " + clzz.getMsg());

System.out.println("Parameterized Number is : " + clzz.getNumber());

}



//This function will provide the patameter data

@DataProvider(name = "Data-Provider-Function")

public Object[][] parameterIntTestProvider() {



TestNGTest6_3_0 obj = new TestNGTest6_3_0();

obj.setMsg("Hello");

obj.setNumber(123);



return new Object[][]{

{obj}

};

}

}

Result

Parameterized Number is : 123
PASSED: parameterIntTest(TestNGTest6_3_0@dc6a77)

TestNG’s parameterized test is very user friendly and flexible (either in XML file or inside the class). It can support many complex data type as parameter value and the possibility is unlimited. As example above, we even can pass in our own object (TestNGTest6_3_0) for parameterized test


No comments: