Best Testng code snippet using org.testng.DataProviderHolder
Source:Parameters.java
...379 throw new TestNGException("Conversion issue on parameter: " + paramName, e);380 }381 throw new TestNGException("Unsupported type parameter : " + type);382 }383 private static DataProviderHolder findDataProvider(Object instance, ITestClass clazz,384 ConstructorOrMethod m,385 IAnnotationFinder finder, ITestContext context) {386 DataProviderHolder result = null;387 IDataProvidable dp = findDataProviderInfo(clazz, m, finder);388 if (dp != null) {389 String dataProviderName = dp.getDataProvider();390 Class dataProviderClass = dp.getDataProviderClass();391 if (! Utils.isStringEmpty(dataProviderName)) {392 result = findDataProvider(instance, clazz, finder, dataProviderName, dataProviderClass, context);393 if(null == result) {394 throw new TestNGException("Method " + m + " requires a @DataProvider named : "395 + dataProviderName + (dataProviderClass != null ? " in class " + dataProviderClass.getName() : "")396 );397 }398 }399 }400 return result;401 }402 /**403 * Find the data provider info (data provider name and class) on either @Test(dataProvider),404 * @Factory(dataProvider) on a method or @Factory(dataProvider) on a constructor.405 */406 private static IDataProvidable findDataProviderInfo(ITestClass clazz, ConstructorOrMethod m,407 IAnnotationFinder finder) {408 IDataProvidable result;409 if (m.getMethod() != null) {410 //411 // @Test(dataProvider) on a method412 //413 result = AnnotationHelper.findTest(finder, m.getMethod());414 if (result == null) {415 //416 // @Factory(dataProvider) on a method417 //418 result = AnnotationHelper.findFactory(finder, m.getMethod());419 }420 if (result == null) {421 //422 // @Test(dataProvider) on a class423 result = AnnotationHelper.findTest(finder, clazz.getRealClass());424 }425 } else {426 //427 // @Factory(dataProvider) on a constructor428 //429 result = AnnotationHelper.findFactory(finder, m.getConstructor());430 }431 return result;432 }433 /**434 * Find a method that has a @DataProvider(name=name)435 */436 private static DataProviderHolder findDataProvider(Object instance, ITestClass clazz,437 IAnnotationFinder finder,438 String name, Class<?> dataProviderClass,439 ITestContext context)440 {441 DataProviderHolder result = null;442 Class<?> cls = clazz.getRealClass();443 boolean shouldBeStatic = false;444 if (dataProviderClass != null) {445 cls = dataProviderClass;446 shouldBeStatic = true;447 }448 for (Method m : ClassHelper.getAvailableMethods(cls)) {449 IDataProviderAnnotation dp = finder.findAnnotation(m, IDataProviderAnnotation.class);450 if (null != dp && name.equals(getDataProviderName(dp, m))) {451 Object instanceToUse;452 if (shouldBeStatic && (m.getModifiers() & Modifier.STATIC) == 0) {453 Injector injector = context.getInjector(clazz);454 if (injector != null) {455 instanceToUse = injector.getInstance(dataProviderClass);456 } else {457 instanceToUse = ClassHelper.newInstance(dataProviderClass);458 }459 } else {460 instanceToUse = instance;461 }462 // Not a static method but no instance exists, then create new one if possible463 if ((m.getModifiers() & Modifier.STATIC) == 0 && instanceToUse == null) {464 instanceToUse = ClassHelper.newInstanceOrNull(cls);465 }466 if (result != null) {467 throw new TestNGException("Found two providers called '" + name + "' on " + cls);468 }469 result = new DataProviderHolder(dp, m, instanceToUse);470 }471 }472 return result;473 }474 private static String getDataProviderName(IDataProviderAnnotation dp, Method m) {475 return Strings.isNullOrEmpty(dp.getName()) ? m.getName() : dp.getName();476 }477 @SuppressWarnings({"deprecation"})478 private static Object[] createParameters(Method m, MethodParameters params,479 IAnnotationFinder finder, XmlSuite xmlSuite, Class annotationClass, String atName)480 {481 List<Object> result = Lists.newArrayList();482 Object[] extraParameters;483 //484 // Try to find an @Parameters annotation485 //486 IParametersAnnotation annotation = finder.findAnnotation(m, IParametersAnnotation.class);487 Class<?>[] types = m.getParameterTypes();488 if(null != annotation) {489 String[] parameterNames = annotation.getValue();490 extraParameters = createParametersForMethod(m, types,491 finder.findOptionalValues(m), atName, parameterNames, params, xmlSuite);492 }493 //494 // Else, use the deprecated syntax495 //496 else {497 IParameterizable a = (IParameterizable) finder.findAnnotation(m, annotationClass);498 if(null != a && a.getParameters().length > 0) {499 String[] parameterNames = a.getParameters();500 extraParameters = createParametersForMethod(m, types,501 finder.findOptionalValues(m), atName, parameterNames, params, xmlSuite);502 }503 else {504 extraParameters = createParametersForMethod(m, types, finder.findOptionalValues(m), atName, new String[0], params, xmlSuite);505 }506 }507 //508 // Add the extra parameters we found509 //510 Collections.addAll(result, extraParameters);511 // If the method declared an Object[] parameter and we have parameter values, inject them512 for (int i = 0; i < types.length; i++) {513 if (Object[].class.equals(types[i])) {514 result.add(i, params.parameterValues);515 }516 }517 return result.toArray(new Object[result.size()]);518 }519 /**520 * If the method has parameters, fill them in. Either by using a @DataProvider521 * if any was provided, or by looking up <parameters> in testng.xml522 * @return An Iterator over the values for each parameter of this523 * method.524 */525 public static ParameterHolder handleParameters(final ITestNGMethod testMethod,526 Map<String, String> allParameterNames,527 Object instance,528 MethodParameters methodParams,529 XmlSuite xmlSuite,530 IAnnotationFinder annotationFinder,531 Object fedInstance)532 {533 /*534 * Do we have a @DataProvider? If yes, then we have several535 * sets of parameters for this method536 */537 final DataProviderHolder dataProviderHolder =538 findDataProvider(instance, testMethod.getTestClass(),539 testMethod.getConstructorOrMethod(), annotationFinder, methodParams.context);540 if (null != dataProviderHolder) {541 int parameterCount = testMethod.getConstructorOrMethod().getParameterTypes().length;542 for (int i = 0; i < parameterCount; i++) {543 String n = "param" + i;544 allParameterNames.put(n, n);545 }546 final Iterator<Object[]> parameters = MethodInvocationHelper.invokeDataProvider(547 dataProviderHolder.instance, /* a test instance or null if the dataprovider is static*/548 dataProviderHolder.method,549 testMethod,550 methodParams.context,551 fedInstance,...
Source:ParameterHolder.java
1package org.testng.internal;2import org.testng.IDataProviderMethod;3import java.util.Iterator;4/**5 * A simple holder for parameters that contains the parameters and where these came from (data6 * provider or testng.xml)7 *8 * @author cbeust9 */10public class ParameterHolder {11 /** Origin of the parameters. */12 public enum ParameterOrigin {13 ORIGIN_DATA_PROVIDER, // A data provider14 ORIGIN_XML, // TestNG XML suite15 NATIVE // Native injection is involved.16 }17 final IDataProviderMethod dataProviderHolder;18 final Iterator<Object[]> parameters;19 final ParameterOrigin origin;20 public ParameterHolder(21 Iterator<Object[]> parameters, ParameterOrigin origin, IDataProviderMethod dph) {22 super();23 this.parameters = parameters;24 this.origin = origin;25 this.dataProviderHolder = dph;26 }27}...
Source:DataProviderHolder.java
...3import java.lang.reflect.Method;4/**5 * A holder for a pair of Method and IDataProviderAnnotation6 */7public class DataProviderHolder {8 Object instance;9 Method method;10 IDataProviderAnnotation annotation;11 public DataProviderHolder(IDataProviderAnnotation annotation, Method method, Object instance) {12 this.annotation = annotation;13 this.method = method;14 this.instance = instance;15 }16}...
DataProviderHolder
Using AI Code Generation
1package com.test;2import org.testng.annotations.DataProvider;3import org.testng.annotations.Test;4public class TestNGDataProvider {5 @DataProvider(name = "data-provider")6 public Object[][] dataProviderMethod() {7 return new Object[][] { { "data one" }, { "data two" } };8 }9 @Test(dataProvider = "data-provider")10 public void testMethod(String data) {11 System.out.println("Data is: " + data);12 }13}14package com.test;15import org.testng.annotations.DataProvider;16import org.testng.annotations.Test;17public class TestNGDataProvider {18 @DataProvider(name = "data-provider")19 public Object[][] dataProviderMethod() {20 return new Object[][] { { "data one" }, { "data two" } };21 }22 @Test(dataProvider = "data-provider")23 public void testMethod(String data) {24 System.out.println("Data is: " + data);25 }26}27package com.test;28import org.testng.annotations.DataProvider;29import org.testng.annotations.Test;30public class TestNGDataProvider {31 @DataProvider(name = "data-provider")32 public Object[][] dataProviderMethod() {33 return new Object[][] { { "data one" }, { "data two" } };34 }35 @Test(dataProvider = "data-provider")36 public void testMethod(String data) {37 System.out.println("Data is: " + data);38 }39}40package com.test;41import org.testng.annotations.DataProvider;42import org.testng.annotations.Test;43public class TestNGDataProvider {44 @DataProvider(name = "data-provider")45 public Object[][] dataProviderMethod() {46 return new Object[][] { { "data one" }, { "data two" } };47 }48 @Test(dataProvider = "data-provider")49 public void testMethod(String data) {50 System.out.println("Data is: " + data);51 }52}53package com.test;54import org.testng.annotations.DataProvider;55import org.testng.annotations.Test;56public class TestNGDataProvider {57 @DataProvider(name = "data-provider")58 public Object[][] dataProviderMethod() {59 return new Object[][] { { "data one" }, { "data two" } };60 }
DataProviderHolder
Using AI Code Generation
1package com.test;2import org.testng.annotations.DataProvider;3import org.testng.annotations.Test;4{5@DataProvider(name = "data-provider")6public Object[][] dataProviderMethod() {7return new Object[][] { { "data one" }, { "data two" } };8}9@Test(dataProvider = "data-provider")10public void testMethod(String data) {11System.out.println("Data is: " + data);12}13}14package com.test;15import org.testng.annotations.DataProvider;16import org.testng.annotations.Test;17{18@Test(dataProvider = "data-provider", dataProviderClass = DataProviderHolder.class)19public void testMethod(String data) {20System.out.println("Data is: " + data);21}22}23package com.test;24import org.testng.annotations.DataProvider;25import org.testng.annotations.Test;26{27@Test(dataProvider = "data-provider", dataProviderClass = DataProviderHolder.class)28public void testMethod(String data) {29System.out.println("Data is: " + data);30}31}32package com.test;33import org.testng.annotations.DataProvider;34import org.testng.annotations.Test;35{36@Test(dataProvider = "data-provider", dataProviderClass = DataProviderHolder.class)37public void testMethod(String data) {38System.out.println("Data is: " + data);39}40}41package com.test;42import org.testng.annotations.DataProvider;43import org.testng.annotations.Test;44{45@Test(dataProvider = "data-provider", dataProviderClass = DataProviderHolder.class)46public void testMethod(String data) {47System.out.println("Data is: " + data);48}49}50package com.test;51import org.testng.annotations.DataProvider;52import org.testng.annotations.Test;53{54@Test(dataProvider = "data-provider", dataProviderClass = DataProviderHolder.class)55public void testMethod(String data) {56System.out.println("Data is: " + data);57}58}59package com.test;60import org.testng.annotations.DataProvider;61import org.testng.annotations.Test;
DataProviderHolder
Using AI Code Generation
1import org.testng.annotations.DataProvider;2import org.testng.annotations.Test;3import org.testng.internal.DataProviderHolder;4public class TestNGDataProviderFromTestNGXML {5 @DataProvider(name = "testData")6 public Object[][] getTestData() {7 return DataProviderHolder.getInstance().get("testData");8 }9 @Test(dataProvider = "testData")10 public void testMethod(String name, int age) {11 System.out.println("Name: " + name + " Age: " + age);12 }13}
TestNG is a Java-based open-source framework for test automation that includes various test types, such as unit testing, functional testing, E2E testing, etc. TestNG is in many ways similar to JUnit and NUnit. But in contrast to its competitors, its extensive features make it a lot more reliable framework. One of the major reasons for its popularity is its ability to structure tests and improve the scripts' readability and maintainability. Another reason can be the important characteristics like the convenience of using multiple annotations, reliance, and priority that make this framework popular among developers and testers for test design. You can refer to the TestNG tutorial to learn why you should choose the TestNG framework.
You can push your abilities to do automated testing using TestNG and advance your career by earning a TestNG certification. Check out our TestNG certification.
Watch this complete tutorial to learn how you can leverage the capabilities of the TestNG framework for Selenium automation testing.
Get 100 minutes of automation test minutes FREE!!