TestNG之Factory

如果我们的测试方法中,同一个变量需要很多个不同的测试数据,那么这些测试数据由谁提供呢,testng提供了factory的注解,下面我们来一探究竟。

一、单独使用Factory

1.新建一个含有@Factory的类,且在该类中实例化测试类的对象,如

复制代码
package com.testng;

import org.testng.annotations.Factory;

/** 
 * @author QiaoJiafei 
 * @version 创建时间:2015年12月22日 下午6:17:06 
 * 类说明 
 */
public class TestFactory {

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

2.新建测试类,并使用这个工厂类提供的数据

复制代码
package com.testng;

import org.testng.annotations.Test;

/** 
 * @author QiaoJiafei 
 * @version 创建时间:2015年12月22日 下午6:19:10 
 * 类说明 
 */
public class WebTest {
      private int m_numberOfTimes;
      public WebTest(int numberOfTimes) {
        m_numberOfTimes = numberOfTimes;
      }
     
      @Test
      public void testServer() {
       // access the web page
       System.out.println(m_numberOfTimes ); 
  }
}
复制代码

3.在xml文件中只需要,增加<class name="com.testng.TestFactory"/>即可,注意不需要在xml中在额外定义<class name="com.testng.WebTest"/>。

4.执行结果,打印:

30
10
0
80
70
60
20
40
50
90

5.执行后,报告显示如下:

相当于运行了10次测试方法。The factory method can receive parameters just like @Test and @Before/After and it must return Object[].  The objects returned can be of any class (not necessarily the same class as the factory class) and they don't even need to contain TestNG annotations (in which case they will be ignored by TestNG).

二、Factory和dataProvider 配合使用

复制代码
package com.testng;

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

/** 
 * @author QiaoJiafei 
 * @version 创建时间:2015年12月22日 下午6:17:06 
 * 类说明 
 */
public class TestFactory {

     /*@Factory
     public Object[] createInstances() {
         Object[] result = new Object[10]; 
         for (int i = 0; i < 10; i++) {
             result[i] = new WebTest(i * 10);
         }
         return result;
      }*/
     @Factory(dataProvider = "dp")
     public Object[] createInstances(int n) {
         Object[] result = new Object[1];
         for (int i = 0; i < 1; i++) {
             result[i] = new WebTest(n);
         }
         return result;
     }
      
     @DataProvider
     static public Object[][] dp() {
       return new Object[][] {
         new Object[] { 41 },
         new Object[] { 42 },
       };
     }

        
}
复制代码

执行结果,打印:

41

42

报告显示执行了两次测试方法

posted on   乔叶叶  阅读(666)  评论(0编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示