# TestNG `@DataProvider` – 测试参数示例

> 原文： [https://howtodoinjava.com/testng/testng-dataprovider/](https://howtodoinjava.com/testng/testng-dataprovider/)

TestNG 提供的重要功能是 **testng `DataProvider`**功能。 它可以帮助您编写**数据驱动的测试**，这实际上意味着同一测试方法可以使用不同的数据集多次运行。

请注意，除了从[`testng.xml`](https://howtodoinjava.com/testng/testng-parameters/)传递参数之外，`@DataProvider`是向测试方法传递参数的第二种方法。 它有助于为测试方法提供复杂的参数，因为不可能从 XML 做到这一点。

要在测试中使用`DataProvider`功能，您必须声明一个由`@DataProvider`注解的方法，然后在测试方法中使用该方法，并在测试方法中使用`@Test`注解。

## 1\. TestNG 同一类中的`@DataProvider`和`@Test`

下面的测试类包含一个测试方法，该方法采用一个参数作为输入，并在执行时将其打印到控制台。 通过使用 TestNG 的`@DataProvider`注解，在同一类中也可以使用`DataProvider`方法。

使用`@DataProvider`注解的`name`属性提及所述`DataProvider`方法的名称。 `DataProvider`返回一个具有两个数据集的`Object`类双数组，即“数据一”和“数据二”。

```java
package com.howtodoinjava.test;

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class SameClassDataProvider 
{
	@DataProvider(name = "data-provider")
	public Object[][] dataProviderMethod() {
		return new Object[][] { { "data one" }, { "data two" } };
	}

	@Test(dataProvider = "data-provider")
	public void testMethod(String data) {
		System.out.println("Data is: " + data);
	}
}

```

现在运行以上测试。 以上测试运行的输出如下：

```java
Data is: data one
Data is: data two

PASSED: testMethod("data one")
PASSED: testMethod("data two")

```

从上面的测试结果可以看出，该类中的相应测试方法已执行了两次。 测试方法的执行取决于`DataProvider`方法传递的数据集的数量，在这种情况下，由于`DataProvider`返回了两组不同的数据，因此测试方法执行了两次。

`@DataProvider`方法必须以`Object`类的双数组（`Object[][]`）形式返回数据。 第一个数组代表一个数据集，其中第二个数组包含参数值。

## 2\. TestNG 不同类中的`@DataProvider`和`@Test`

要了解这一点，请添加两个名称分别为`DataProviderClass`和`TestClass`的类，如下所示。

#### 2.1\. `DataProvider.java`

```java
import org.testng.annotations.DataProvider;

public class DataProviderClass 
{
	@DataProvider(name = "data-provider")
	public static Object[][] dataProviderMethod() 
	{
		return new Object[][] { { "data one" }, { "data two" } };
	}
}

```

#### 2.2\. `TestClass.java`

```java
import org.testng.annotations.Test;

public class TestClass 
{
	@Test(dataProvider = "data-provider", dataProviderClass = DataProviderClass.class)
	public void testMethod(String data) 
	{
		System.out.println("Data is: " + data);
	}
}

```

#### 2.3 演示

现在运行以上测试。 以上测试运行的输出如下：

```java
Data is: data one
Data is: data two

PASSED: testMethod("data one")
PASSED: testMethod("data two")

```

从上面的测试结果中可以看到，根据`DataProvider`方法传递给它的数据，该测试方法已执行两次。 在这种情况下，`DataProvider`方法位于另一个类中。 在这种情况下，必须将`dataProviderMethod()`声明为静态，以便测试方法可以使用另一类中的`dataProviderMethod()`来提供数据。

学习愉快！