TestNG系列-第五章 测试方法、测试类和测试分组(续4)-工厂

8 工厂们( Factories)
工厂们允许动态创建测试。比如:假设我们想要创建一个方法,该方法需要使用不同的值访问网站的几次网页。
public class TestWebServer {  
@Test(parameters = { "number-of-times" })  
public void accessPage(int numberOfTimes) {    
	while (numberOfTimes-- > 0) {     
	// access the web page    
	}  
}
}

xml配置
<test name="T1"> 
  <parameter name="number-of-times" value="10"/>  
  <class name="TestWebServer"/> 
</test>
<test name="T2"> 
  <parameter name="number-of-times" value="20"/>  
  <class name="TestWebServer"/>
</test>


<test name="T3"> 
  <parameter name="number-of-times" value="30"/>  
  <class name="TestWebServer"/>
</test>

这种情况很快会变得无法管理,这种情况下,我们应该使用工厂(factory):
publicclassWebTestFactory{
	@FactorypublicObject[]createInstances(){
		Object[]result=newObject[10];for(inti=0;i<10;i++){
			result[i]=newWebTest(i*10);
		}returnresult;
	}
}

新的测试类如下:
publicclassWebTest{
	privateintm_numberOfTimes;publicWebTest(intnumberOfTimes){
		m_numberOfTimes=numberOfTimes;
	}@TestpublicvoidtestServer(){
		for(inti=0;i<m_numberOfTimes;i++){
			//accessthewebpage
		}
	}
}

在testng.xml中紧紧需要配置包含工厂方法的类即可。因为测试实例本身会在运行的时候被创建:
<class name="WebTestFactory" />

工厂方法可以接受像@test和@Before/After这样的参数,必须返回object[]。返回的对象可以任何类,且甚至不用包含TestNG的注解。
工厂也可以和数据提供者一起使用,可以通过将注解@Factory放在正常方法或者构造方法上。下面是一个构造方法的例子:
@Factory(dataProvider="dp")publicFactoryDataProviderSampleTest(intn){
	super(n);
}@DataProviderstaticpublicObject[][]dp(){
	returnnewObject[][]{
		newObject[]{
			41
		},
		newObject[]{
			42
		},
		
	};
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值