- TestNG Tutorial
- TestNG - Home
- TestNG - Overview
- TestNG - Environment
- TestNG - Writing Tests
- TestNG - Basic Annotations
- TestNG - Execution Procedure
- TestNG - Executing Tests
- TestNG - Suite Test
- TestNG - Ignore a Test
- TestNG - Group Test
- TestNG - Exception Test
- TestNG - Dependency Test
- TestNG - Parameterized Test
- TestNG - Run JUnit Tests
- TestNG - Test Results
- TestNG - Annotation Transformers
- TestNG - Asserts
- TestNG - Parallel Execution
- TestNG - Plug with ANT
- TestNG - Plug with Eclipse
- TestNG - TestNG - vs JUnit
- TestNG Useful Resources
- TestNG - Quick Guide
- TestNG - Useful Resources
- TestNG - Discussion
TestNG - Basic Annotations - DataProvider
@DataProvider annotation helps us write data-driven test cases. The @DataProvider annotation enables us to run a test method multiple times by passing different data-sets.
The following is a list of attributes supported by the @DataProvider annotation:
Attribute | Description |
---|---|
name |
The name of this data provider. If it's not supplied, the name of this data provider will automatically be set to the name of the method. The annotated method must return an Object[][] where each Object[] can be assigned the parameter list of the test method. |
parallel |
If set to true, tests generated using this data provider are run in parallel. Default value is false. |
Create Test Case Class
Create a java test class, say, TestAnnotationDataProvider.java in /work/testng/src.
Add a test method testMethod() to your test class.
Add an Annotation @Test to method testMethod().
Add a method dataProviderMethod to the test class with annotation @DataProvider.
Implement the test condition and check the behaviour of @DataProvider annotation.
Following are the TestAnnotationAfterMethod.java contents:
import org.testng.annotations.Test; import org.testng.annotations.DataProvider; public class TestAnnotationDataProvider { @DataProvider(name = "data-provider") public Object[][] dataProviderMethod() { return new Object[][] { { "data one" }, { "data two" }, { "data three" } }; } @Test(dataProvider = "data-provider") public void testMethod(String data) { System.out.println("Data is: " + data); } }
Create testng.xml
Next, let's create testng.xml file in /work/testng/src, to execute test case(s). This file captures your entire testing in XML. This file makes it easy to describe all your test suites and their parameters in one file, which you can check in your code repository or e-mail to coworkers. It also makes it easy to extract subsets of your tests or split several runtime configurations (e.g., testngdatabase.xml would run only tests that exercise your database).
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd"> <suite name="Suite"> <test thread-count="5" name="Test"> <classes> <class name="TestAnnotationDataProvider"/> </classes> </test> <!-- Test --> </suite> <!-- Suite -->
Compile the test case using javac.
/work/testng/src$ javac TestAnnotationDataProvider.java
Now, run the testng.xml, which will run the test case defined in <test> tag. As you can see the @DataProvider passes parameters to the test method.
/work/testng/src$ java org.testng.TestNG testng.xml
Verify the output.
Data is: data one Data is: data two Data is: data three =============================================== Suite Total tests run: 3, Passes: 3, Failures: 0, Skips: 0 ===============================================