首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dependsOnMethods与@Factory

dependsOnMethods与@Factory
EN

Stack Overflow用户
提问于 2013-07-01 16:38:38
回答 2查看 325关注 0票数 1

我很困惑。我在网上读过很多文章,似乎找不到我想要的解决方案。

我想要的是在循环中并行地运行测试,这样一个测试生成数据,而另一个测试消耗数据。

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

是否有一种方法可以指定@Factory和@DataProvider的组合以实现我想要的?

代码语言:javascript
复制
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构造器 String:默认测试名称 DataDependencyTest1构造器 字符串: String1 DataDependencyTest1构造器 字符串: String2 测试名称: Test_DependencyInjection_GenerateTestData 创建测试数据 字符串: String1 将数据添加到当前测试上下文中 测试名称: Test_DependencyInjection_GenerateTestData 创建测试数据 字符串: String2 将数据添加到当前测试上下文中 测试名称: Test_DependencyInjection_ExtractData 从测试上下文中提取数据 字符串: String2 测试名称: Test_DependencyInjection_ExtractData 从测试上下文中提取数据 字符串: String2

现在问题是..。

每次运行_ExtractData()测试方法时,测试都会运行_GenerateTestData()。但是,依赖测试似乎只在循环的最后一次迭代中运行。

如何使测试序列像这样:

Test_DependencyInjection_GenerateTestData --使用"String1“ Test_DependencyInjection_ExtractData --使用"String1“ Test_DependencyInjection_GenerateTestData --使用"String2“ Test_DependencyInjection_ExtractData --使用"String2“

EN

回答 2

Stack Overflow用户

发布于 2014-06-26 06:54:09

将您的测试添加到不同的组中,并按组设置为true。这应该能起作用。

票数 0
EN

Stack Overflow用户

发布于 2017-12-27 09:40:23

将属性"group-by-instances“添加为testNG xml的"true”并运行它,现在应该在执行另一个类实例之前先执行类的每个测试。

代码语言:javascript
复制
<suite name="Suite">
  <test name="Test" group-by-instances="true">
    <classes>
      <class name="Your.test.class.DependencyTest1"/>
    </classes>
  </test> 
</suite>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17409483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档