TestNG Tutorials 48: How to Pass Parameters of Different Datatypes in TestNG

Hello Folks,

Most of us know that, we can pass parameter as a String to methods in TestNG class. Is it really like that? No. Its not.

We can pass parameters in whatever data types we required. TestNG will convert them automatically to required data type. We will see an example below:

[java]package Parameters;

import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class ParametersWithDifferentDatatypes {

/* TestNG will convert automatically passed parameter value sin desired data types.*/ @Parameters({“StringParam”, “intParam”, “booleanParam”}) @Test /* * A test method accepting argument of different datatypes */ public void sampleTest(String stringParaValue, int intParamValue, boolean booleanParamValue) { System.out.println(“String parameter: “+stringParaValue); System.out.println(“Int parameter: “+intParamValue); System.out.println(“Boolean parameter: “+booleanParamValue);

}

}
[/java]

Output:

[java][RemoteTestNG] detected TestNG version 6.14.2 String parameter: Amod Int parameter: 28

Boolean parameter: true

=============================================== Suite Total tests run: 1, Failures: 0, Skips: 0

===============================================

[/java]

Note:
1. You need to pass correct values as per desired data types in testng xml. If you are using an integer datatype in test method and passing an alphabet string from testng xml, you will get NumberFormatException.

Example:
Modify above testng.xml as below:

[xml]

[/xml]

Output:

[java][RemoteTestNG] detected TestNG version 6.14.2 [Utils] [ERROR] [Error] java.lang.NumberFormatException: For input string: “dfgfdg” at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:580) at java.lang.Integer.valueOf(Integer.java:766) at org.testng.internal.Parameters.convertType(Parameters.java:466) at org.testng.internal.Parameters.createParams(Parameters.java:293) at org.testng.internal.Parameters.createParametersForMethod(Parameters.java:359) at org.testng.internal.Parameters.createParameters(Parameters.java:620) at org.testng.internal.Parameters.handleParameters(Parameters.java:769) at org.testng.internal.ParameterHandler.handleParameters(ParameterHandler.java:49) at org.testng.internal.ParameterHandler.createParameters(ParameterHandler.java:37) at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:923) at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125) at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109) at org.testng.TestRunner.privateRun(TestRunner.java:648) at org.testng.TestRunner.run(TestRunner.java:505) at org.testng.SuiteRunner.runTest(SuiteRunner.java:455) at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450) at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415) at org.testng.SuiteRunner.run(SuiteRunner.java:364) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84) at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208) at org.testng.TestNG.runSuitesLocally(TestNG.java:1137) at org.testng.TestNG.runSuites(TestNG.java:1049) at org.testng.TestNG.run(TestNG.java:1017) at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:114) at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)

at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)

=============================================== Suite Total tests run: 1, Failures: 1, Skips: 0

===============================================

[/java]

2. TestNG is intelligent in case of boolean. If you pass anything true, it will take true and false in case of false. If you pass anything other than this, it will take false by default.

Java Code:

[java]package Parameters;

import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class ParametersWithDifferentDatatypes {

/* TestNG will convert automatically passed parameter value sin desired data types.*/ @Parameters({“StringParam”, “intParam”, “wrongParam”,”trueParam”,”falseParam”}) @Test /* * A test method accepting argument of different data types */ public void sampleTest(String stringParaValue, int intParamValue, boolean wrongParamValue, boolean trueParamValue, boolean falseParamValue) { System.out.println(“String parameter: “+stringParaValue); System.out.println(“Int parameter: “+intParamValue); System.out.println(“Wrong Boolean parameter: “+wrongParamValue); System.out.println(“True Boolean parameter: “+trueParamValue); System.out.println(“False Boolean parameter: “+falseParamValue);

}

}
[/java]

Testng xml:

[xml]

[/xml]

Output:

[java][RemoteTestNG] detected TestNG version 6.14.2 String parameter: Amod Int parameter: 123 Wrong Boolean parameter: false True Boolean parameter: true

False Boolean parameter: false

=============================================== Suite Total tests run: 1, Failures: 0, Skips: 0

===============================================

[/java]

3. You can not pass user defined data types in parameters. See an example below:

[java]package Parameters;

import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

class someClass {

}

public class ParametersWithDifferentDatatypes {

/* * TestNG will convert automatically passed parameter value sin desired data * types. */ @Parameters({ “StringParam” }) @Test /* * A test method accepting argument of different data types */ public void sampleTest(someClass stringParaValue) {

System.out.println(“String parameter: ” + stringParaValue);

}

}
[java]

Testng xml: [xml]

[/xml]

Output: [java][RemoteTestNG] detected TestNG version 6.14.2 [Utils] [ERROR] [Error] org.testng.TestNGException: Unsupported type parameter : class Parameters.someClass at org.testng.internal.Parameters.convertType(Parameters.java:495) at org.testng.internal.Parameters.createParams(Parameters.java:293) at org.testng.internal.Parameters.createParametersForMethod(Parameters.java:359) at org.testng.internal.Parameters.createParameters(Parameters.java:620) at org.testng.internal.Parameters.handleParameters(Parameters.java:769) at org.testng.internal.ParameterHandler.handleParameters(ParameterHandler.java:49) at org.testng.internal.ParameterHandler.createParameters(ParameterHandler.java:37) at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:923) at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125) at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109) at org.testng.TestRunner.privateRun(TestRunner.java:648) at org.testng.TestRunner.run(TestRunner.java:505) at org.testng.SuiteRunner.runTest(SuiteRunner.java:455) at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450) at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415) at org.testng.SuiteRunner.run(SuiteRunner.java:364) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84) at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208) at org.testng.TestNG.runSuitesLocally(TestNG.java:1137) at org.testng.TestNG.runSuites(TestNG.java:1049) at org.testng.TestNG.run(TestNG.java:1017) at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:114) at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)

at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)

=============================================== Suite Total tests run: 1, Failures: 1, Skips: 0

===============================================

[/java]

More about TestNG in upcoming posts. Stay tuned.

If you have any doubt, feel free to comment below. If you like my posts, please like, comment, share and subscribe. #ThanksForReading

#HappySelenium