为什么用它

建议使用 TestNG 作为 Java 项目的主要单元测试框架,因为 TestNG 在参数化测试、依赖测试以及套件测试(组)方面功能更加强大。TestNG 意味着高级的测试和复杂的集成测试。它更加的灵活,特别是对大的套件测试。另外,TestNG 也涵盖了 JUnit4 的全部功能。那就没有任何理由使用 Junit了

更多细节,可以参见:JUnit 4 与 TestNG 对比

解决什么问题

  • 断言结果
  • 期望异常
  • 进行分组
  • 多线程测试
  • 依赖测试
  • 有测试可视化结果

即:它即能测试单元测试,也能进行集成测试,甚至也可以使用于系统测试(比较少用)。

基本概念

概论

TestNG,即Testing, Next Generation,下一代测试技术,是一套根据JUnit 和 NUnit思想而构建的利用注释来强化测试功能的一个测试框架,即可以用来做单元测试,也可以用来做集成测试

组成

  1. 一套测试(suite)由一个XML文件所表示。它能够包含一个或者多个测试, 标记来定义。
  2. test由 标记来表示一个测试,并且可以包含一个或者多个TestNG类。
  3. TestNG 类是包含至少一个TestNG annotation的 java类,由标签描述并包含一个或多个测试方法。
  4. 测试方法,就是一个普通的Java方法,在由@Test标记。

使用场景

使用场景是按注解来陈述的,没有列举全部注解,更多注解可以参见:TestNG基本注解

@BeforeClass

用于集成测试或者其他依赖的初始。比如数据库的初始

@AfterClass

用于测试的资源销毁。建议尽量不用。

@Test

用于标记需要测试的方法。一般在类里import static org.testng.Assert.*;,这样方法的时候更优雅。

断言

在方法里,通过assertXxx系列来断言结果

@Test
public void assertResult() {
String result = "result";
//断言结果值等于
assertEquals("result", result); boolean isTrue = true;
//断言结果真假
assertTrue(isTrue);
//其他的asertXxx系统自行查看API
}

异常

通过expectedExceptions属性来捕获异常

@Test(expectedExceptions = BusinessException.class)
public void expectedException() {
Iterator i = mock(Iterator.class);
when(i.next()).thenThrow(BusinessException.class); i.next();
}

线程

通过invocationCount和threadPoolSize属性来实现。

@Test(invocationCount = 8, threadPoolSize = 3)
public void testThread() {
long threadId = Thread.currentThread().getId();
System.out.println("线程号为:" + threadId);
}

执行结果

[ThreadUtil] Starting executor timeOut:0ms workers:8 threadPoolSize:3
线程号为:12
线程号为:13
线程号为:11
线程号为:12
线程号为:11
线程号为:13
线程号为:12
线程号为:13
PASSED: testThread
PASSED: testThread
PASSED: testThread
PASSED: testThread
PASSED: testThread
PASSED: testThread
PASSED: testThread
PASSED: testThread

依赖

通过dependsOnMethods、dependsOnGroups来实现。

@Test
public void preAction() {
System.out.println("preAction");
} @Test(dependsOnMethods = "preAction")
public void action() {
System.out.println("action");
//dependsOnGroups就不再做试验了
}

执行结果:

preAction
action
PASSED: preAction
PASSED: action

忽略

通过enable来实现

@Test(enabled=false)
public void disable(){
//建议少用
System.out.println("暂时不执行");
}

分组

通过groups来实现

@Test(groups = "database")
public void update() {
IDbDao dbDao = mock(IDbDao.class);
UserEntity user = new UserEntity();
when(dbDao.fetch(UserEntity.class, 1L)).thenReturn(user); UserEntity fetchUser = dbDao.fetch(UserEntity.class, 1L); assertEquals(user, fetchUser);
}

测试报告

测试报告是测试非常重要的部分.

TestNG默认情况下,会生产两种类型的测试报告HTML的和XML的。 测试报告位于 "test-output" 目录下.

参考资源

官方文档

TestNG 入门教程

单元测试——测试神器,testng的更多相关文章

  1. [原创]Burp Suite web应用程序渗透测试神器

    [原创]Burp Suite web应用程序渗透测试神器 一 Burp Suite介绍 Burp Suite是Web应用程序测试的最佳工具之一,其多种功能可以帮我们执行各种任务.请求的拦截和修改,扫描 ...

  2. Sysbench测试神器:一条命令生成百万级测试数据

    1. 基准测试 基准测试(benchmarking)是性能测试的一种类型,强调的是对一类测试对象的某些性能指标进行定量的.可复现.可对比的测试. 进一步来理解,基准测试是在某个时候通过基准测试建立一个 ...

  3. 渗透测试神器Cobalt Strike使用教程

    Cobalt Strike是一款渗透测试神器,常被业界人称为CS神器.Cobalt Strike已经不再使用MSF而是作为单独的平台使用,它分为客户端与服务端,服务端是一个,客户端可以有多个,可被团队 ...

  4. .net测试篇之单元测试/集成测试神器Autofixture

    autofixture简介 有了单元测试框架加上Moq(后面我们会用单独章节来介绍moq),可以说测试问题基上都能搞定了.然而有了AutoFixture对单元测试来说可以说是如虎添翼,AutoFixt ...

  5. 白盒测试的学习之路----(四)搭建测试框架TestNG测试

    TestNG是一个开源自动化测试框架; TestNG是类似于JUnit,但它不是一个JUnit扩展.它的灵感来源于JUnit.它的目的是优于JUnit的,尤其是当测试集成的类. TestNG消除了大部 ...

  6. ☕【Java技术指南】「TestNG专题」单元测试框架之TestNG使用教程指南(上)

    TestNG介绍 TestNG是Java中的一个测试框架, 类似于JUnit 和NUnit, 功能都差不多, 只是功能更加强大,使用也更方便. 详细使用说明请参考官方链接:https://testng ...

  7. ASP.NET CORE 中用单元测试测试控制器

    之前用ASP.NET CORE做的项目 加了一个新功能,数据库加了个字段balabala.... 更新到服务器上,新功能测试正常,然后就没管了..... 今天客户说网站有BUG,某个页面打开后出错了, ...

  8. C# vs2015单元测试测试资源管理器不显示测试方法

    问题描述:在用VS2015用测试框架NUnit单元测试的时候,测试资源管理器死活不出现测试方法,无法运行单元测试模块 现象如下图: 原因:nunit版本不对应 解决方案:下载nunit3.0及往上的版 ...

  9. 【TestNG测试】TestNG、Maven、testng.xml构建测试工程

    创建一个maven工程 使用Idea创建maven工程 ​ 建立类似如上的工程结构,src/main/java,src/test/java,pom.xml,testng.xml,这里由于我们使用工程是 ...

随机推荐

  1. Java——并发编程

    1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User). 任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon( ...

  2. Python实例---CRM管理系统分析180331

    注意:一个项目基本都设计增删改查,且第一个需要做的就是设计表结构 思维导图: 组件使用: Django  +   bootStrap  +   Jquery 数据库表结构设计: 外键关联: 2种方式, ...

  3. 详细说明php的4中开源框架(TP,CI,Laravel,Yii)

    ThinkPHP简称TP,TP借鉴了Java思想,基于PHP5,充分利用了PHP5的特性,部署简单只需要一个入口文件,一起搞定,简单高效.中文文档齐全,入门超级简单.自带模板引擎,具有独特的数据验证和 ...

  4. 统计过程控制与评价 Cpk、SPC、PPM

    Cpk(Process capability index)--工序能力指数 SPC(Statisical Process Control)--工艺过程统计受控状态分析 PPM(Parts Per Mi ...

  5. EF 实体类的制定属性不生成数据库字段

    添加一个标签即可 [NotMapped] 没什么营养,就是防忘记

  6. hihocoder Round #c1(hihoCoder太阁最新面经算法竞赛1 )

    Test链接:https://cn.vjudge.net/contest/231849 选自hihoCoder太阁最新面经算法竞赛1 更多Test:传送门 A:区间求差 给一组区间集合A和区间集合B, ...

  7. BZOJ 1040 骑士 基环树 树形DP

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1040 题目大意: Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫 ...

  8. 1303. [CQOI2009]中位数【前缀和+乱搞】

    Description 给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b.中位数是指把所有元素从小到大排列后,位于中间的数. Input 第一行为两个正整数n和b ,第二行为 ...

  9. 2018-2019赛季最后的随想/$\rm{NOIP2018}$游记·启示录

    他看着眼前的屏幕,静静地发呆. 他不知道迎接他的将会是什么,后天的\(\rm{NOIp}\)终究是个谜. 刚刚给机房里其他人讲完期望的他,打心底觉得自己没有讲好,但效果似乎还可以. "希望别 ...

  10. 一个牛公司的关于oracle数据的面试题

    我也忘记是从哪里download的了,为了加深记忆,也为了完成我的博客,我决定写进博客里,如果有错误,欢迎大家指正,谢谢. 问题一. 解释一下sum的作用? 答:求符合条件的记录某数值字段的和. 问题 ...