您的位置:首页 > 其它

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

2016-11-14 19:29 519 查看
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
},

};
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  TestNG 工厂
相关文章推荐