企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 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()`来提供数据。 学习愉快!