TestNG是一个测试框架,其灵感来自JUnit和NUnit,但引入了一些新的功能,使其功能更强大,使用更方便。
TestNG是一个开源自动化测试框架;TestNG表示下一代(Next Generation的首字母)。 TestNG类似于JUnit(特别是JUnit 4),但它不是JUnit框架的扩展。它的灵感来源于JUnit。它的目的是优于JUnit,尤其是在用于测试集成多类时。TestNG消除了大部分的旧框架的限制,使开发人员能够编写更加灵活和强大的测试。 因为它在很大程度上借鉴了Java注解(JDK5.0引入的)来定义测试,它也可以显示如何使用这个新功能在真实的Java语言生产环境中。

TestNG的特点

l 注解
l TestNG使用Java和面向对象的功能
l 支持综合类测试(例如,默认情况下,不用创建一个新的测试每个测试方法的类的实例)
l 独立的编译时测试代码和运行时配置/数据信息
l 灵活的运行时配置
l 主要介绍“测试组”。当编译测试,只要要求TestNG运行所有的“前端”的测试,或“快”,“慢”,“数据库”等
l 支持依赖测试方法,并行测试,负载测试,局部故障
l 灵活的插件API
l 支持多线程测试

org.testng
testng
6.8
test

运行示例

TestNg的对象注入
需要继承AbstractTestNGSpringContextTests类。

四个元注解 @Target,@Retention,@Documented,@Inherited,是专门用来定义注解的注解

@Target 表示该注解用于什么地方,可能的值在枚举类 ElemenetType 中,包括:
ElemenetType.CONSTRUCTOR-----------构造器声明
ElemenetType.FIELD -----------------------域声明(包括 enum 实例)
ElemenetType.LOCAL_VARIABLE------- 局部变量声明
ElemenetType.METHOD ------------------方法声明
ElemenetType.PACKAGE --------------------------------- 包声明
ElemenetType.PARAMETER ------------------------------参数声明
ElemenetType.TYPE------------------------ 类,接口(包括注解类型)或enum声明
@Retention 表示在什么级别保存该注解信息。可选的参数值在枚举类型 RetentionPolicy 中:
RetentionPolicy.SOURCE ------------------注解将被编译器丢弃
RetentionPolicy.CLASS ----------- ---------注解在class文件中可用,但会被VM丢弃
RetentionPolicy.RUNTIME -------将在运行期也保留注释,因此可以通过反射机制读取注解的信息。
@Documented 将此注解包含在 javadoc 中 ,它代表着此注解会被javadoc工具提取成文档。在doc文档中的内容会因为此注解的信息内容不同而不同。相当与@see,@param 等。
@Inherited 允许子类继承父类中的注解。

TestNG的常用注解
@BeforeSuite
@AfterSuite
@BeforeTest
@AfterTest
@BeforeClass
@AfterClass
@BeforeMethod
@AfterMethod
@Test alwaysRun控制是否每次都执行,dependsOnMethods是一种依赖,依赖某个方法执行,dataProvider可以指定测试数据。
自定义注解

实现ITestListener接口

ITestListener接口定义

调用方式,加注解,通过@Listeners注解嵌入自己的处理逻辑

AbstractTestNGSpringContextTests的实现

对集成了spring TestContext Framework与TestNG环境中的ApplicationContext测试支持的基础测试类进行了抽象。当你继承AbstractTestNGSpringContextTests时,就可以访问到下列protected的成员变量:applicationContext:使用它进行显式的bean查找或者测试整个上下文的状态。

ApplicationContextAware示例,调用方自身也要被容器实例化,才能拿到实例化的上下文ApplicationContext

WebApplicationContext也是对ApplicationContext的一种扩展

BeanFactory是根本。DefaultListableBeanFactory是基本实现。XmlBeanFactory是扩展。


资源的定位,加载以及注册。

AbstractTestNGSpringContextTests的初始化以及监听的注册

委派模式(Delegate)

委派模式(Delegate)是面向对象设计模式中常用的一种模式。这种模式的原理为类B和类A是两个互相没有任何关系的类,B具有和A一模一样的方法和属性;并且调用B中的方法,属性就是调用A中同名的方法和属性。B好像就是一个受A授权委托的中介。第三方的代码不需要知道A的存在,也不需要和A发生直接的联系,通过B就可以直接使用A的功能,这样既能够使用到A的各种公能,又能够很好的将A保护起来了。一举两得,岂不很好!

通过DependencyInjectionTestExecutionListener创建测试类对象


AbstractTransactionalTestNGSpringContextTests

继承该类的测试用例在spring管理的事务中进行,测试完后对数据库的记录不会造成任何影响。你对数据库进行一些操作后,它会自动把数据库回滚,这样就保证了你的测试对于环境没有任何影响。

IHookable

IHookable 监听器提供了类似与面向方面编程(AOP)中的Around Advice 的功能。它在测试方法执行前后提供了切入点,从而使用户能够在测试方法运行前后注入特定的功能。例如,用户可以在当前测试方法运行前加入特定的验证逻辑以决定测试方法是否运行或者跳过,甚至覆盖测试方法的逻辑。下面是 IHookable 监听器要求实现的方法签名。

void run(IHookCallBack callBack, ITestResult testResult)

如要运行原始测试方法逻辑,需要调用 runTestMethod 方法。

callBack.runTestMethod(testResult);

TestNg多线程示例
支持方法依赖调用

TestNg框架源码解析相关推荐

  1. php manual 反射,Laravel框架源码解析之反射的使用详解

    本文实例讲述了Laravel框架源码解析之反射的使用.分享给大家供大家参考,具体如下: 前言 PHP的反射类与实例化对象作用相反,实例化是调用封装类中的方法.成员,而反射类则是拆封类中的所有方法.成员 ...

  2. php 框架源码分析,Laravel框架源码解析之模型Model原理与用法解析

    本文实例讲述了Laravel框架源码解析之模型Model原理与用法.分享给大家供大家参考,具体如下: 前言 提前预祝猿人们国庆快乐,吃好.喝好.玩好,我会在电视上看着你们. 根据单一责任开发原则来讲, ...

  3. Android经典著名的百大框架源码解析(retrofit、Okhttp、Glide、Zxing、dagger等等)

    我们Android程序员每天都要和源码打交道.经过数年的学习,大多数程序员可以"写"代码,或者至少是拷贝并修改代码.而且,我们教授编程的方式强调编写代码的艺术,而不是如何阅读代码. ...

  4. java 并发框架源码_Java并发编程高阶技术-高性能并发框架源码解析与实战

    Java并发编程高阶技术-高性能并发框架源码解析与实战 1 _0 Z' @+ l: s3 f6 r% t|____资料3 Z9 P- I2 x8 T6 ^ |____coding-275-master ...

  5. php实现推广海报,php微信推广海报PHP CodeIgniter框架源码解析

    PHP CodeIgniter框架源码解析 1.index.php :入口文件 |-->define('ENVIRONMENT') |主要用于设置errors日志输出级别 |-->$sys ...

  6. BAT高级架构师合力熬夜15天,肝出了这份PDF版《Android百大框架源码解析》,还不快快码住。。。

    前言 为什么要阅读源码? 现在中高级Android岗位面试中,对于各种框架的源码都会刨根问底,从而来判断应试者的业务能力边际所在.但是很多开发者习惯直接搬运,对各种框架的源码都没有过深入研究,在面试时 ...

  7. iOS开发之Masonry框架-源码解析

    Masonry是iOS在控件布局中经常使用的一个轻量级框架.Masonry让NSLayoutConstraint使用起来更为简洁.Masonry简化了NSLayoutConstraint的使用方式,让 ...

  8. iOS开发之Masonry框架源码解析

    Masonry是iOS在控件布局中经常使用的一个轻量级框架,Masonry让NSLayoutConstraint使用起来更为简洁.Masonry简化了NSLayoutConstraint的使用方式,让 ...

  9. Android开发神器:OkHttp框架源码解析

    前言 HTTP是我们交换数据和媒体流的现代应用网络,有效利用HTTP可以使我们节省带宽和更快地加载数据,Square公司开源的OkHttp网络请求是有效率的HTTP客户端.之前的知识面仅限于框架API ...

  10. axios网络请求框架源码解析

    早期axios0.1.0版本做了对IE浏览器与包含XmlHttpRequest的浏览器的支持.并且做了对请求参数拼接.Json对象序列化等基本功能. 到0.19.0版本时,内部请求已经变为了在Node ...

最新文章

  1. 从零开始单排学设计模式「简单工厂设计模式」黑铁 III
  2. ffmpeg 硬件解码rtsp流_树莓派使用硬件加速视频转码
  3. MariaDB 数据库索引详解(9)
  4. STM32 网络通信Web Server中 SSI与CGI的应用解析
  5. Leetcode(11)-盛最多水的容器
  6. 苹果:iPhone 12定价很合适,首批预订秒光说明用户认可
  7. 详解分布式系统与消息投递(架构师必备)
  8. python装饰器详解 带参数-python中的装饰器详解
  9. .net 怎么在控制器action中返回一个试图_ASP.NET Core MVC/WebAPI中另辟蹊径的全局统一异常处理方式...
  10. MySql常用函数大全讲解
  11. 跨语言词向量笔记7. 无监督跨语言词向量
  12. spriteKit 笔记三 —— Drog 精灵
  13. 【数据结构与算法】- 排序(算法)
  14. IEDA中maven设置远程仓库地址和maven Could not find artifact 问题解决
  15. HGIMDA:用于miRNA-疾病关联预测的异构图推断
  16. 开放式运动耳机排行榜,排行榜最高的五款骨传导耳机
  17. 左手画方右手画圆代码
  18. 最短路 dij floy spfa
  19. sqlserver update join 多关联更新
  20. 【树莓派智能门锁】电机锁控制电源测试【2】

热门文章

  1. 信息系统项目管理师(2022年)—— 重点内容:信息化和信息系统(1)
  2. C语言打印结构体的值,怎么才能把结构体里面的二维数组打印出来?
  3. 达内JAVA云笔记_达内云笔记项目完整代码+注释
  4. Codejock Xtreme ToolkitPro MFC 使用
  5. wxWindows 程序编译选项设置统揽
  6. Jquery实战视频教程学习
  7. 移动端H5解惑-页面适配
  8. 数据分析与R语言视频教程
  9. 在thinkphp中引入自定义的敏感词库
  10. php 仿面包网 源码 飞飞cms_FEIFEI飞飞CMS仿面包网电影网站源码(四色+采集+会员中心+西瓜影音)...