testNG-@Factory详解+demo

这篇具有很好参考价值的文章主要介绍了testNG-@Factory详解+demo。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

@Factory注解从字面意思上来讲就是采用工厂的方法来创建测试数据并配合完成测试,其主要应对的场景是:对于某一个测试用例或方法,我们需要输入多个测试数据进行测试,并且这些测试数据可以是有一定关系(可以通过代码控制),此时,我们就可以把自动化或者手动测试时的遇到的只因测试数据不同的多个测试用例合并成一个测试用例,来进行更方便和快捷的测试。

对编写自己主动化测试代码人员节省了非常多时间

策略:

一般我们会在标有@Factory注解的方法中对测试类进行调用,这时TestNg会自动调用测试类中带有@Test注解的方法;

配置文件:只需要配置带有@Factory注解的类即可;

  1. @Factory必须放在一个返回对象数组的顶部,所有的这些对象都包含测试类的实例,testng会确保@Factory只被调用一次;
  2. @Factory方法是首先被调用的,在@Test方法和配置方法之前,只有当所有的@Factory方法被调用之后,testng才开始执行配置和测试方法;
  3. @Factory允许在运行时动态测试。

上边说了这么多是不是把大家说的云里雾里,晕头转向的,接下来通过具体的例子给小伙伴和同学们分享一下。

实例:

被测试类Person:

publicclass Person {

    String name;

    int age;



    @Parameters({"name","age"})

    publicPerson(String name,int age) {

        super();

        this.name = name;

        this.age = age;

    }

    @Test()

    publicvoid say() {

        System.out.print("我是"+name+" ");

        if(age<18){

            System.out.println("我未成年");

        }elseif(age>=18&&age<=45){

            System.out.println("我是青年人");

        }elseif(age>45&&age<=60){

            System.out.println("我是中年人");

        }elseif(age>60){

            System.out.println("我是老年人");

        }

    }

}

该类的say()方法中有四个判断分支,为了测试充分,必须执行四次这个方法,如果不使用@Factory注解,在TestNG配置文件中必须这样配置:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">

<suite name="Suite">

  <test name="Test1">

        <parameter name="name" value="小明" />

        <parameter name="age" value="10" />

        <classes>

            <class name="hongge.Person" />

        </classes>

    </test>

    <test name="Test2">

        <parameter name="name" value="宏哥" />

        <parameter name="age" value="20" />

        <classes>

            <class name="hongge.Person" />

        </classes>

    </test>

    <test name="Test3">

        <parameter name="name" value="刘创" />

        <parameter name="age" value="50" />

        <classes>

            <class name="hongge.Person" />

        </classes>

    </test>

    <test name="Test4">

        <parameter name="name" value="爷爷" />

        <parameter name="age" value="70" />

        <classes>

            <class name="hongge.Person" />

        </classes>

    </test><!-- Test -->

</suite>

从上边我们可以清楚地看出来:参数一旦多起来,就难以管理了,所以应该使用工厂来做

工厂

Factory注解

如果使用@Factory注解,就比较简单,而且方便扩展,示例如下。

不需改动原有类,添加一个新类PersonFactory

publicclass PersonFactory {

    @Factory

    public Object[] factory() {

        ArrayList testList =newArrayList<>();

        Person tp =newPerson("明明",10);

        testList.add(tp);

        Person tp2 =newPerson("宏哥",20);

        testList.add(tp2);

        Person tp3 =newPerson("刘创",50);

        testList.add(tp3);

        Person tp4 =newPerson("朱爷爷",70);

        testList.add(tp4);

        return testList.toArray();

    }

}
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">

<suite name="Suite">

  <test name="Test1">

        <classes>

            <class name="hongge.PersonFactory" />

        </classes>

    </test><!-- Test -->

</suite> <!-- Suite -->

使用@Factory的运行原理

1、如果不使用@Factory,运行普通的被@Test标注的方法时,实际上是TestNG框架调用了该类的构造函数构造出一个对象,然后再执行对象的这个方法。

2、使用了@Factory后,可以看到被@Factory标注的方法返回了一个Object数组,数组中每一个元素是一个被测试类的对象。也就是说@Factory构造了多个被测试类对象,然后把每一个对象都传递给了TestNG框架,然后TestNG框架在分别执行这些对象中被@Test标注的方法。文章来源地址https://www.toymoban.com/news/detail-690906.html

到了这里,关于testNG-@Factory详解+demo的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FFmpeg音频解码流程详解及简单demo参考

            本文主要讲解FFmpeg的音频解码具体流程,API使用。最后再以一个非常简单的demo演示将一个mp3格式的音频文件解码为原始数据pcm文件。 本文主要基于FFmpeg音频解码新接口。    API接口简单大体讲解如下:         这一步是ffmpeg的任何程序的第一步都是需要先注

    2023年04月08日
    浏览(50)
  • 【前后端的那些事】2万字详解WebRTC + 入门demo代码解析

    WebRTC是一项允许网页浏览器进行实时音视频通信的技术标准。旨在实现在浏览器之间直接进行点对点的音频、视频以及数据共享,无需安装任何插件或额外软件。 ICE全称Interactive Connectivity Establishment ,是一种交互式连接框架,他允许两个设备进行p2p通讯。 在进行p2p通讯过程

    2024年03月11日
    浏览(42)
  • Unity之OpenXR+XR Interaction Toolkit示例Demo详解

    自从升级Unity版本到2021,然后使用OpenXR开发VR之后,我们整个团队的开发效率都提升了不少,这证明了不管什么领域,统一接口,统一规范都是必须的。 关于XR Interaction Toolkit插件,我已经写了几篇文章了,今天才想起来,最基础的Demo讲解还没有写,其实官方的这个Demo对于初

    2024年02月12日
    浏览(41)
  • HTML5开发实例-3D全景(ThreeJs全景Demo) 详解(图)

    在现在市面上很多全景H5的环境下,要实现全景的方式有很多,可以用css3直接构建也可以用基于threeJs的库来实现,还有很多别的制作全景的软件使用 本教学适用于未开发过3D全景的工程狮 如果觉得内容太无聊可以直接跳到最后 下载代码 整个3D全景所用的相关理论就不多说了

    2024年02月06日
    浏览(33)
  • XML的基础知识及XMl文件的创建/读取/更新demo详解

    1.什么是xml? Xml(Extensible Markup Language),可扩展标记语言,一种用于存储数据或传输数据的标记语言,由万维网(W3C开发)。它允许开发人员创建自己的标记,且简单易读,易扩展,支持标准的字符编码,如UFT-8,UTF-16. 2. Xml文档的基本结构 2.1文档声明 ,包括文档版本(ver

    2024年04月09日
    浏览(86)
  • TestNG中的@BeforeSuite注释

    目录 什么是@BeforeSuite注解? @BeforeSuite带注释的方法何时执行? @BeforeSuite annotation有什么用? 所以,是时候集思广益了 我们可以在一个类中使用多个@BeforeSuite注释方法吗? @BeforeSuite放在超类上时如何工作? TestNG是Java生态系统中许多人使用的流行测试框架。它提供了各种注释

    2024年01月24日
    浏览(51)
  • 如何从命令行运行testng.xml?

    目录 创建一个新的java项目并从命令行运行testng.xml 使用命令行运行XML文件 从命令行运行现有maven项目的XML文件 在这篇文章中,我们将使用命令行运行testng.xml。有多种场景需要使用命令行工具运行testng.xml。也许您已经创建了一个maven项目,现在想使用命令行运行testng.xml文件,

    2024年01月17日
    浏览(34)
  • 如何在TestNG中忽略测试用例

    在这篇文章中,我们将讨论如何在TestNG中忽略测试用例。TestNG帮助我们忽略使用@Test注释的情况,我们可以在不同的级别上忽略这些情况。 首先,只忽略一个测试方法或测试用例。 第二,忽略一个类及其子类中的所有情况。 第三个是,忽略包及其子包中的所有情况。 下面我

    2024年04月27日
    浏览(30)
  • Java+Demo对接中国移动 云MAS短信发送(http协议详解,新测成功!)

    一.登录官网,下载http接入文档(随着官网不断更新,可参考官网的文档) 官网地址为:云mas业务平台  进入云MAS管理平台,找到 管理-接口管理 的列表页。 (必读:本文对接方式是 java引用jar包,进行sdk协议对接,后台java代码是引用jar包,调用短信服务的http接口,所以你创

    2024年02月09日
    浏览(47)
  • TestNG和Junit5测试框架梳理

    1. testNG优势 2. testNG常用注解 3. testNG中@Test有哪些参数 举例: 4.  在 TestNG 中实现参数化测试 以Yaml文件为例 创建一个Yaml文件testdata.yaml 获取测试数据及使用 5. 执行顺序 6. testNG断言 7. 失败重试 1. junit5的优势 2. 常用注解 3. TestFactory使用示例 TestFactory其实就是参数化执行同一条

    2024年02月13日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包