美文网首页TestNG
TestNG的 @Factory

TestNG的 @Factory

作者: 我为峰2014 | 来源:发表于2017-11-14 18:59 被阅读63次

    工厂允许你动态的创建测试。

    例如,假设你需要创建一个测试方法,并用它来多次访问一个web页面,而且每次都带有不同的参数:

    public class TestWebServer {
      @Test(parameters = { "number-of-times" })
      public void accessPage(int numberOfTimes) {
        while (numberOfTimes-- > 0) {
         // access the web page
        }
      }
    }
    

    Test.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>
    

    参数一旦多起来,就难以管理了,所以应该使用工厂来做:

    public class WebTestFactory {
      @Factory
      public Object[] createInstances() {
       Object[] result = new Object[10]; 
       for (int i = 0; i < 10; i++) {
          result[i] = new WebTest(i * 10);
        }
        return result;
      }
    }
    

    新的测试类如下:

    public class WebTest {
      private int m_numberOfTimes;
      public WebTest(int numberOfTimes) {
        m_numberOfTimes = numberOfTimes;
      }
    
      @Test
      public void testServer() {
       for (int i = 0; i < m_numberOfTimes; i++) {
         // access the web page
        }
      }
    }
    

    testng.xml只需要引用包含工厂方法的类,而测试实例自己会在运行时创建:

    <class name="WebTestFactory" />
    

    工厂方法可以接受诸如@Test@Before/After所标记的参数,并且会返回 Object[]这些返回的对象可以是任何类(不一定是跟工厂方法相同的类),并且他们甚至都不需要TestNG注解(在例子中会被TestNG忽略掉)

    工厂也可以被应用于数据提供者,并可以通过将@Factory注释无论是在普通的方法或构造函数利用此功能。这里是一个构造工厂的例子:

    @Factory(dataProvider = "dp")
    public FactoryDataProviderSampleTest(int n) {
      super(n);
    }
    
    @DataProvider
    static public Object[][] dp() {
      return new Object[][] {
        new Object[] { 41 },
        new Object[] { 42 },
      };
    }
    

    该示例将TestNG的创建两个测试类,这个构造函数将调用值为41和42的对像

    相关文章

      网友评论

        本文标题:TestNG的 @Factory

        本文链接:https://www.haomeiwen.com/subject/tzwfvxtx.html