Testng测试框架(6)--@Factory动态地创建测试类的实例-示例

时间:2024-04-12 11:20:47

在 TestNG 中,@Factory 注解用于动态地创建测试类的实例。当你想要根据一系列不同的参数或数据集来创建多个测试实例时,这个注解非常有用。每个实例都会执行类中定义的测试方法。

以下是如何在 TestNG 中使用 @Factory 注解的基本步骤:

  1. 定义一个测试类:这个类包含了你想要执行的测试方法。

  2. 添加一个带有 @Factory 注解的静态方法:这个方法用于创建测试类的实例。它通常接受一个或多个参数,这些参数由数据提供者方法提供。

  3. 编写一个数据提供者方法:这个方法使用 @DataProvider 注解标记,并返回一个对象数组,用于为 @Factory 方法提供参数。

下面是一个简单的例子,展示了如何使用 @Factory@DataProvider 来动态创建测试实例:

import org.testng.annotations.DataProvider;  
import org.testng.annotations.Factory;  
import org.testng.annotations.Test;  
  
public class DynamicTestExample {  
  
    private String testData;  
  
    public DynamicTestExample(String testData) {  
        this.testData = testData;  
    }  
  
    @Test  
    public void testMethod() {  
        System.out.println("Executing test with data: " + testData);  
        // 在这里编写你的测试逻辑  
    }  
  
    @DataProvider(name = "testDataProvider")  
    public static Object[][] provideTestData() {  
        return new Object[][]{  
                {"Data1"},  
                {"Data2"},  
                {"Data3"}  
        };  
    }  
  
    @Factory(dataProvider = "testDataProvider")  
    public static Object[] createInstances(String testData) {  
        return new Object[]{new DynamicTestExample(testData)};  
    }  
}

在这个例子中:

  • DynamicTestExample 是测试类,它有一个构造函数接受一个 String 类型的参数 testData
  • testMethod 是测试方法,它使用构造函数中传递的 testData 执行一些测试逻辑。
  • provideTestData 是一个数据提供者方法,它返回一个二维数组,包含三个字符串元素。
  • createInstance 是一个带有 @Factory 注解的静态方法。它接受一个字符串参数,并使用这个参数创建一个 DynamicTestExample 的实例。@Factory 注解中的 dataProvider 属性指向了数据提供者方法 provideTestData

当 TestNG 运行这个测试类时,它会:

  1. 调用 provideTestData 方法来获取数据。
  2. 对于数据提供者返回的每一行数据,调用 createInstance 方法来创建一个新的 DynamicTestExample 实例。
  3. 对于每个创建的实例,执行 testMethod 方法。

这样,你就能够基于不同的数据集动态地创建和执行多个测试实例了。每个实例都会使用不同的 testData 值来执行 testMethod