1

我正在尝试为我的测试实现数据提供程序的延迟加载,但它不起作用。下面是我的工厂注释方法的代码片段:

import java.util.Iterator;

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

public class TF
{
    @DataProvider(name="TestInstances")
    public static Iterator<Object> testInstancesDP()
    {
        return new Iterator<Object>()
        {
            int counter=1;
            int MAX;
            {
                MAX=4;
            }

            @Override
            public boolean hasNext()
            {
                return counter<=MAX;
            }

            @Override
            public Object next()
            {
                System.out.println("passing "+counter+" iterator instance");
                return new Object[] {counter++};
            }

            @Override
            public void remove()
            {
                //TODO: IllegalOperationException
            }
        };
    }

    private int order;

    @Factory(dataProvider="TestInstances",dataProviderClass=TF.class)
    public TF(int order)
    {
        this.order=order;
        System.out.println("TF Instance created : "+order);
    }

    @DataProvider
    public Iterator<Object> testDataProvider()
    {
        return new Iterator<Object>()
        {
            int counter=1;
            int MAX;
            {
                MAX=TF.this.order;
            }

            @Override
            public boolean hasNext()
            {
                return counter<=MAX;
            }

            @Override
            public Object next()
            {
                System.out.println("passing "+counter+" as DP");
                return new Object[] {"DP"+counter++};
            }

            @Override
            public void remove()
            {
                //TODO: IllegalOperationException
            }

        };
    }

    @Test(dataProvider="testDataProvider")
    public void testStepExecutor(String str)
    {
        System.out.println("Test method execution : "+str);
    }

    @AfterClass
    public void tearDown()
    {
        System.out.println("Tear Down: "+this.order);
    }

    /**
     * @return the order
     */
    public int getOrder()
    {
        return order;
    }
}
  • 实际输出:

    通过 1 个迭代器实例 TF 实例创建:1 通过 2 个迭代器实例 TF 实例创建:2 通过 3 个迭代器实例 TF 实例创建:3 通过 4 个迭代器实例 TF 实例创建:4 [TestNG] 运行:命令行套件

    通过 1 作为 DP 测试方法执行:DP1 拆除:1 通过 1 作为 DP 测试方法执行:DP1 通过 2 作为 DP 测试方法执行:DP2 拆除:2 通过 1 作为 DP 测试方法执行:DP1 通过 2 作为 DP 测试方法执行:DP2通过3作为DP测试方法执行:DP3拆解:3通过1作为DP测试方法执行:DP1通过2作为DP测试方法执行:DP2通过3作为DP测试方法执行:DP3通过4作为DP测试方法执行: DP4 拆解: 4

    ================================================= 命令行套件

    总测试运行:10,失败:0,跳过:0

  • 预期产出

    通过 1 个迭代器实例 TF 实例创建:1 通过 1 作为 DP 测试方法执行:DP1 拆除:1 通过 2 个迭代器实例 TF 实例创建:2 通过 1 作为 DP 测试方法执行:DP1 通过 2 作为 DP 测试方法执行:DP2 撕裂Down:2通过3迭代器实例TF实例创建:3通过1作为DP测试方法执行:DP1通过2作为DP测试方法执行:DP2通过3作为DP测试方法执行:DP3 Tear Down:3通过4迭代器实例TF实例创建:4通过1作为DP测试方法执行:DP1通过2作为DP测试方法执行:DP2通过3作为DP测试方法执行:DP3通过4作为DP测试方法执行:DP4拆解:4 [TestNG]运行:命令行套件

    ================================================= 命令行套件

    总测试运行:10,失败:0,跳过:0

这是 TestNG 实现中的错误还是 Factory 不支持延迟加载.. TIA

4

1 回答 1

0

数据提供程序的延迟加载不适用于 Factory,因为 TestNG 当前正在运行测试之前调用所有工厂方法。

于 2015-07-17T09:32:07.493 回答