TestNG : Java Testing Next Generation :: Parameterized Example
TestNG Parameterized Example |
The “Parameterized Test” means vary parameter value for unit test. In TestNG, XML file or “DataProvider” is used to provide vary parameter for unit testing.
1. XML file for parameterized test.
Declare “@Parameters” annotation in method which needs parameter testing, the parametric data will be provide by TestNG’s XML configuration files. By doing this, you can reuse a single test case with different data sets easily. In addition, even end user, QA or QE can provide their own data sets for testing.
2. @DataProvider for parameterized test.
While pulling data values into an XML file can be quite handy, but test cases occasionally may require complex data types, which can’t be represented as a String or a primitive value in XML file. TestNG handles this scenario with @DataProvider annotation, which facilitates the mapping of complex parameter types to a test method.
- @DataProvider for Vector, String or Integer as parameter
- @DataProvider for object as parameter
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 below, you even can pass in your own object (TestExampleWithDataProviderUsingObject) for Parameterized test.
Employee.java
package com.javaskool;
public class Employee {
private int eid;
private String Name;
public int getEid() {
return eid;
}
public void setEid(int eid) {
this.eid = eid;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
}
TestExampleWithDataProvider.java
package com.javaskool;
import java.util.Vector;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class TestExampleWithDataProvider {
@Test(dataProvider = "xyz")// or write method name "parameterIntTestProvider"
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 parameter data
@DataProvider(name = "xyz")
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"}}
};
}
}
Output
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;@2fe93820)
PASSED: parameterIntTest(class java.lang.String, [Ljava.lang.String;@7863d572)
PASSED: parameterIntTest(class java.lang.Integer, [Ljava.lang.String;@62526d1d)
===============================================
Default test
Tests run: 3, Failures: 0, Skips: 0
===============================================
TestExampleWithDataProviderUsingObject.java
package com.javaskool;
import java.util.Vector;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class TestExampleWithDataProviderUsingObject {
@Test(dataProvider = "x")
public void parameterIntTest(Employee clzz[]) {
System.out.println("Parameterized Number is : " + clzz[0].getEid());
System.out.println("Parameterized Number is : " + clzz[0].getName());
System.out.println("Parameterized Number is : " + clzz[1].getEid());
System.out.println("Parameterized Number is : " + clzz[1].getName());
}
//This function will provide the patameter data
@DataProvider(name = "x")
public Object[][] parameterIntTestProvider() {
Employee obj[] = new Employee[2];
for(int i=0;i<2;i++)
{
obj[i]=new Employee();
}
obj[0].setName("Tom");
obj[0].setEid(1001);
obj[1].setName("james");
obj[1].setEid(1002);
return new Object[][]{
{obj}
};
}
}
Output
Parameterized Number is : 1001
Parameterized Number is : Tom
Parameterized Number is : 1002
Parameterized Number is : james
PASSED: parameterIntTest([Lcom.javaskool.Employee;@1e3380c5)
===============================================
Default test
Tests run: 1, Failures: 0, Skips: 0
===============================================
TestExampleWithXML.java
package com.javaskool;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class TestExampleWithXML {
@Test
@Parameters(value="number")
public void parameterIntTest(int number) {
System.out.println("Parameterized Number is : " + number);
}
}
testng.xml
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
<suite name="My test suite1">
<test name="testing1">
<parameter name="number" value="2"/>
<classes>
<class name="com.javaskool.TestExampleWithXML" />
</classes>
</test>
</suite>
Downloads Examples |
Recent Comments