Java 依赖于方法和@Factory

Java 依赖于方法和@Factory,java,testng,factory,testng-dataprovider,Java,Testng,Factory,Testng Dataprovider,我被难住了。我在网上读了很多帖子,似乎找不到我想要的解决方案 我希望在循环中并行运行测试,这样一个测试生成数据,另一个测试消耗数据 我发现传入的ITestContext对于在测试之间存储测试数据非常有用。但是,当使用dependsOnMethod时,所有数据生成测试都会在第一个依赖项方法运行之前运行 有没有办法指定@Factory和@DataProvider的组合来实现我想要的 public class DependencyTest1 { private String value;

我被难住了。我在网上读了很多帖子,似乎找不到我想要的解决方案

我希望在循环中并行运行测试,这样一个测试生成数据,另一个测试消耗数据

我发现传入的ITestContext对于在测试之间存储测试数据非常有用。但是,当使用dependsOnMethod时,所有数据生成测试都会在第一个依赖项方法运行之前运行

有没有办法指定@Factory和@DataProvider的组合来实现我想要的

public class DependencyTest1 {
    private String value;

    @DataProvider()
    public static Object[][] DependencyTestProvider() {
        return new Object[][] {
                // Data passed into tests
                { "String1" },
                { "String2" },
        };
    }

    @Factory(dataProvider = "DependencyTestProvider")
    public DependencyTest1(String value) {

        System.out.println("DataDependencyTest1 Constructor");
        System.out.println("String: " + value);

        this.value = value;

    }

    //*****************************************************************************
    //*****************************************************************************
    @Test(description = "Test Dependency Injection: Generate Test Data", groups = "unit")
    public void Test_DependencyInjection_GenerateTestData(ITestContext context, Method method) throws Exception {

        System.out.println("Test Name: " + method.getName());
        System.out.println("Create Test Data");
        System.out.println("String: " + value);
        System.out.println("Add data to current test context");

        context.setAttribute("value", value);
    }

    //*****************************************************************************
    //*****************************************************************************
    @Test(description = "Test Dependency Injection: Extract Test Data",groups = "unit", dependsOnMethods = "Test_DependencyInjection_GenerateTestData")
    public void Test_DependencyInjection_ExtractData(ITestContext context, Method method) {

        System.out.println("Test Name: " + method.getName());
        System.out.println("Extract data from test context");

        String value = (String) context.getAttribute("value");

        System.out.println("String: " + value);

    }
} 
测试输出:

DataDependencyTest1构造函数

字符串:默认测试名称

DataDependencyTest1构造函数

字符串:String1

DataDependencyTest1构造函数

字符串:String2

测试名称:测试依赖注入生成测试数据

创建测试数据

字符串:String1

将数据添加到当前测试上下文

测试名称:测试依赖注入生成测试数据

创建测试数据

字符串:String2

将数据添加到当前测试上下文

测试名称:测试依赖注入提取数据

从测试上下文中提取数据

字符串:String2

测试名称:测试依赖注入提取数据

从测试上下文中提取数据

字符串:String2

现在问题来了

每次运行
\u GenerateTestData()
测试方法时,测试都会运行
\u ExtractData()
。然而,依赖性测试似乎只在循环的最后一次迭代中运行

如何使测试序列如下所示:

Test_DependencyInjection_GenerateTestData--使用“String1”

测试依赖注入提取数据--使用“String1”

测试依赖注入生成测试数据——使用“String2”

测试依赖注入提取数据--使用“String2”


在单独的组中添加测试,并将group by instances设置为true。这就应该做到了。

将属性“按实例分组””添加为testNG xml的“true”并运行它,现在,在执行另一个类实例之前,应该先执行一个类的每个测试

<suite name="Suite">
  <test name="Test" group-by-instances="true">
    <classes>
      <class name="Your.test.class.DependencyTest1"/>
    </classes>
  </test> 
</suite>