我正在尝试为测试实现数据提供程序的延迟加载,但无法正常工作。以下是我的工厂注释方法的代码段:
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
拆解:2
传递3个迭代器实例
创建的TF实例:3
通过1作为DP
测试方法执行:DP1
通过2作为DP
测试方法执行:DP2
通过3作为DP
测试方法执行:DP3
拆解:3
传递4个迭代器实例
创建的TF实例:4
通过1作为DP
测试方法执行:DP1
通过2作为DP
测试方法执行:DP2
通过3作为DP
测试方法执行:DP3
通过4作为DP
测试方法执行:DP4
拆解:4
[TestNG]正在运行:
命令行套件
==============================================
命令行套件
测试总数:10,失败:0,跳过:0
这是TestNG实现中的错误还是Factory不支持延迟加载。TIA
最佳答案
数据提供者的延迟加载不适用于Factory,因为TestNG当前在运行测试之前调用所有工厂方法。