测试框架JUnit VS TestNG对比分析

目录
  • 引言
  • 单元测试
  • TestNG 和 JUnit 的区别
  • 测试套件
  • 注释
  • 用例管理
    • 分组测试
    • 忽略测试
    • 参数化
    • 依赖测试
    • 异常测试
    • 超时测试
  • 结论

引言

软件开发经历了许多阶段,如需求收集和分析、设计、软件开发、测试和发布。测试是 SDLC 不可或缺的一部分,单元测试是一种可靠的测试类型。像 JUnit 和 TestNG 这样优秀的单元测试框架已经成为主流选择,但是关于 TestNG 与 JUnit 的差异的争论一直存在。

单元测试

测试不是单一的活动,而是涵盖各种测试场景。它以不同的方式分类,其中一种是基于测试级别,例如集成、单元和系统测试。

单元测试涉及测试软件产品中最微小的代码。目的是检查代码的每个组件的质量是否按预期执行。它在开发阶段执行。隔离一段代码以确保其有效性和准确性。代码的单个组件可以是函数、模块、对象或方法。单元测试总是在集成测试之前进行。它有助于在应用程序开发生命周期的早期阶段发现缺陷。

开发人员使用不同的单元测试框架来创建单元测试的自动化测试用例。市场上有不同的工具可用于执行单元测试,如 JUnit、NUnit、PHPUnit、JMockit 等。

JUnit 于 1997 年作为一个开源的基于 Java 的单元测试框架推出。它是 XUnit 的一部分,它是单元测试框架家族的代表。它允许开发人员编写和运行可重复的测试。

TestNG 是一个基于 Java 的单元测试框架,具有新的和改进的功能。这些新功能包括灵活的测试配置、参数支持、数据驱动测试、注释、各种集成等等。TestNG 执行单元、端到端和集成测试。TestNG 生成报告,帮助开发人员了解所有测试用例的通过、失败和跳过状态。

了解 TestNG 和 JUnit 测试框架之间的区别,有助于选择最适合单元测试框架。

TestNG 和 JUnit 的区别

虽然 TestNG 和 JUnit 都是最顶级的基于 Java 的自动化框架,并且各有优缺点。下面分享 JUnit 和 TestNG 框架之间的主要差别:

测试套件

测试套件由一组测试用例组成,允许同时执行测试。测试套件功能在 JUnit 的早期版本中是不允许的,但在 JUnit 5 中引入,而 TestNG 早早地就支持了该功能。尽管两者都有测试套件,但它们在每个测试套件上执行测试的方式存在关键差异。让我们看一下显示测试套件如何在两个框架中运行的代码片段。

TestNG 中的测试套件从XML 文件运行:

<suite name=”TestSuite”>
    <test name=”Demo”>
        <classes>
            <class name=”com.fsecure.demo.testng.TestNGTest1″ />
            <class name=”com.fsecure.demo.testng.TestNGTest2″ />
        </classes>
    </test>
</suite>

而在 JUnit 中,使用 @RunWith 和 @Suite 等注释,如下面的代码片段所示。两个类 JUnit1 和 JUnit2 是使用注解 @Suite 编写的。

@RunWith(Suite.class)
@Suite.SuiteClasses({
   JUnit1.class,
   JUnit2.class
})
public class JunitTest5 {
   //code
}

使用 TestNG 对测试人员来说更容易,因为它为他们提供了使用测试套件的多种选择。例如,可以通过将类捆绑到组中来执行测试套件。

注释

FEATURE JUNIT 5 TESTNG
将该方法标记为测试方法 @Test @Test
它在类的第一个测试方法之前执行 @BeforeAll @BeforeClass
它在当前类的所有测试方法都执行完之后执行 @AfterAll @AfterClass
它在每个测试方法之前执行 @BeforeEach @BeforeMethod
在每个测试方法之后执行 @AfterEach @AfterMethod
它在套件中的所有测试运行之前执行 NA @BeforeSuite
它在套件中的所有测试都运行后执行 NA @AfterSuite
测试前执行 NA @BeforeTest
测试后执行 NA @AfterTest
在任何这些组的第一个测试方法之前执行 NA @BeforeGroups
在任何这些组的第一个测试方法之后执行 NA @AfterGroups
忽略测试 @Disabled (In JUnit4 it is @ignore) @Test(Enable=false)
预期异常 @Test(expected=Arithmetic @Test(expectedException=Arithmetic Exception.class)
超时 @Timeout @Test(timeout = 1000)

PS:在 JUnit 4 中,@BeforeClass@AfterClass方法被认为是静态的,而在TestNG中没有这样的限制。

用例管理

管理测试执行是一项重要任务;与 JUnit 相比,TestNG 使这项任务更容易。

分组测试

这个功能目前只有 TestNG 支持。 它涉及通过创建多个组来执行任务。每个都包含各种测试类,并且可以在单独的组中运行测试,而不是运行孤立的测试。它使用@Test注解中的参数。

@Test(groups={"groupname1",<"group2">..,<"groupN">})

在 TestNG 中,可以在<test><suite>标记下轻松识别。

忽略测试

不需要执行来自大型测试套件的某些测试,尤其是只想测试特定功能时。此功能包含了是否应忽略或考虑特定的单元测试。JUnit 和 TestNG 都配备了这个特性,以及前面讨论的所有注释。在 JUnit 中,此功能使用@ignore注解:

@Ignore
public void method1() {
     //code
}

而在 TestNG 中,它使用@Test(enabled = false)注释运行。

@Test(enabled=false)
public void TestWithException(){
    //code
}

参数化

参数化可以理解是数据驱动的测试,可以减少代码量并提高其可读性。TestNG 与 JUnit 提供此功能的方式有所不同。TestNG 有一种简单的方法来修复测试用例中的参数。它利用@Parameter注释并将参数添加到给定的测试方法。browser的值在 XML 文件(例如testng.xml)中说明,而 JUnit 使用@ParameterizedTest注释。

依赖测试

这个功能表示一种测试方法何时依赖于另一种测试方法。JUnit 目前不支持此功能。TestNG 支持多种类型的测试。在 TestNG 中,依赖方法使用@DependsOnMethods注解。

@Test(dependsOnMethods = {"Login"})
//code

异常测试

此功能验证在测试执行期间遇到错误时要使用的异常。TestNG 和 JUnit 都支持此功能,但处理异常的方式略有不同。TestNG 在@Test注解中使用了expectedException参数 。

在 JUnit 中,assertThrows API 用于异常处理:

@Test(expectedExceptions = ArithmeticException.class)
public void FunTester() {
  int i = 10/0;
}

超时测试

这个功能指测试执行中的超时功能,该功能设置时间限制,当超过该时间限制时,测试会自动失败。TestNG 和 JUnit 都以相同的语法提供此功能。

JUnit:

@Test(timeout = 1000)
public void method1() {
      // do nothing
}

TestNG:

@Test(timeOut = 1000)
public void testThisShouldFail() {
        // do nothing
}

结论

许多测试框架都支持自动化测试,具体取决于测试的目标。TestNG 和 JUnit 都是自动化单元测试领域最受信任的框架。TestNG 克服了 JUnit 的诸多不便,简化了测试人员的工作。使用 TestNG,可以执行单元测试、集成测试和端到端测试,而 JUnit 仅涵盖单元测试。

以上就是测试框架JUnit VS TestNG对比分析的详细内容,更多关于测试框架JUnit对比TestNG的资料请关注我们其它相关文章!

(0)

相关推荐

  • python和Appium移动端多设备自动化测试框架实现

    目录 前言: 一.流程图 二.appium服务 三.连接测试设备 四.元素封装 五.运行 前言: 本篇文章主要介绍基于pytest和Appium框架,支持Android和iOS功能自动化的测试框架.同时该框架支持多设备测试,并利用allure库,生成可视化测试报告.本框架主要涉及的内容包括:python3.pytest.appium.allure等,此处已假设你具备相应的基础知识,同时已有可以随时运行的测试环境(iOS设备的测试只能在Mac系统中执行,没有Mac的朋友们,可以看看不执行) 一.流

  • Java优秀测试框架TestNG详解

    目录 我们为什么需要TestNG? TestNG搭建 TestNG注解及功能 TestNG配置文件 1.新增配置文件 2.配置测试套件(suit) 3.配置测试案例 TestNG测试 1.异常测试 2.忽略测试 3.超时测试 4.参数化测试 4.1使用XML配置文件提供 4.2使用@DataProvider传递参数 5.依赖测试 TestNG测试报告 总结 我们为什么需要TestNG? Java有好几个测试框架,JUnit是比较常见的一个,Spring系列默认的测试框架就是JUnit.TestN

  • SpringBoot测试junit遇到的坑及解决

    目录 一.NullPointerException 原因 解决 二.org.springframework.context.ApplicationContextException 三.java.lang.NoClassDefFoundError 原因 四.Error:(9,45) java: 程序包org.springframework.boot.test.context不存在 解决方法 五.java.lang.IllegalStateException: Failed to load Appl

  • Java使用Junit4.jar进行单元测试的方法

    目录 一.下载依赖包 二.添加到依赖 三.设置 test 目录 四.创建测试类 五.开始测试 一.下载依赖包 分别下载 junit.jar 以及 hamcrest-core.jar 二.添加到依赖 在项目跟目录创建 lib 文件夹,并把下载的依赖包拖进去 鼠标移动到依赖包上,右键选择 Add as Library....依次添加 junit.jar 以及 hamcrest-core.jar 到 library 中 三.设置 test 目录 在项目根目录创建 test 文件夹,右键设置 Mark

  • Python测试框架pytest介绍

    目录 一.Pytest简介 二.Pytest安装 三.Pytest测试执行 四.测试类主函数 五.断言方法 六.常用命令详解 七.接口调用 一.Pytest简介 Pytest is a mature full-featured Python testing tool that helps you write better programs.The pytest framework makes it easy to write small tests, yet scales to support

  • springboot集成junit编写单元测试实战

    目录 一:查看jar包版本号是否为junit4: 二:实战应用: 三:扩展 在做单元测试时,代码覆盖率常常被拿来作为衡量测试好坏的指标,甚至,用代码覆盖率来考核测试任务完成情况,比如,代码覆盖率必须达到80%或 90%.于是乎,测试人员费尽心思设计案例覆盖代码.用代码覆盖率来衡量,有利也有弊. 首先,让我们先来了解一下所谓的“代码覆盖率”.我找来了所谓的定义:代码覆盖率 = 代码的覆盖程度,一种度量方式. 一:查看jar包版本号是否为junit4: junit自身注解: @BeforeClass

  • Pytest单元测试框架生成HTML测试报告及优化的步骤

    目录 一.安装插件 IDE中安装 命令行安装 二.生成html报告 三.使用小技巧 指定路径 报告独立 四.报告优化 一.安装插件 要生成html类型的报告,需要使用pytest-html插件,可以在IDE中安装,也可以在命令行中安装.插件安装 的位置涉及到不同项目的使用,这里不再详述,想了解的可自行查询. IDE中安装 在File>Settings>Project>Project Interpreter界面,点击“ + ”搜索pytest-html即可进行安装. 命令行安装 建议先在命

  • 测试框架JUnit VS TestNG对比分析

    目录 引言 单元测试 TestNG 和 JUnit 的区别 测试套件 注释 用例管理 分组测试 忽略测试 参数化 依赖测试 异常测试 超时测试 结论 引言 软件开发经历了许多阶段,如需求收集和分析.设计.软件开发.测试和发布.测试是 SDLC 不可或缺的一部分,单元测试是一种可靠的测试类型.像 JUnit 和 TestNG 这样优秀的单元测试框架已经成为主流选择,但是关于 TestNG 与 JUnit 的差异的争论一直存在. 单元测试 测试不是单一的活动,而是涵盖各种测试场景.它以不同的方式分类

  • Java中的异常测试框架JUnit使用上手指南

    JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework).Junit测试是程序员测试,即白盒测试.该项目主页:http://www.junit.org/ 使用JUnit时,主要都是通过继承TestCase类别来撰写测试用例,使用testXXX()名称来撰写单元测试. 用JUnit写测试真正所需要的就三件事: 1.  一个import语句引入所有junit.framework.*下的类. 2.  一个exte

  • 爬虫框架 Feapder 和 Scrapy 的对比分析

    目录 一.scrapy 分析 1. 解析函数或数据入库出错,不会重试,会造成一定的数据丢失 2. 运行方式,需借助命令行,不方便调试 3. 入库 pipeline,不能批量入库 二.scrapy-redis 分析 1. redis 中的任务可读性不好 2. 取任务时直接弹出,会造成任务丢失 3. 去重耗内存 三.feapder 分析 四.三种爬虫简介 1. AirSpider 2. Spider 3. BatchSpider 五.feapder 项目结构 1. feapder 部署 六.采集效率

  • java协程框架quasar和kotlin中的协程对比分析

    目录 前言 快速体验 添加依赖 添加javaagent 线程VS协程 协程代码 多线程代码 协程完胜 后记 前言 早就听说Go语言开发的服务不用任何架构优化,就可以轻松实现百万级别的qps.这得益于Go语言级别的协程的处理效率.协程不同于线程,线程是操作系统级别的资源,创建线程,调度线程,销毁线程都是重量级别的操作.而且线程的资源有限,在java中大量的不加限制的创建线程非常容易将系统搞垮.接下来要分享的这个开源项目,正是解决了在java中只能使用多线程模型开发高并发应用的窘境,使得java也能

  • Android注解框架对比分析

    Java的注解(Annotation)相当于一种标记,在程序中加入注解就等于为程序打上某种标记,标记可以加在包,类,属性,方法,本地变量上.然后你可以写一个注解处理器去解析处理这些注解(人称编译时注解),也可以在程序运行时利用反射得到注解做出相应的处理(人称运行时注解). 开发Android程序时,没完没了的findViewById, setOnClickListener等等方法,已经让大多数开发者头疼不已.好在市面上有所谓的注解框架可以帮助开发者简化一些过程.比较流行的有butterknife

  • java原生序列化和Kryo序列化性能实例对比分析

    简介 最近几年,各种新的高效序列化方式层出不穷,不断刷新序列化性能的上限,最典型的包括: 专门针对Java语言的:Kryo,FST等等 跨语言的:Protostuff,ProtoBuf,Thrift,Avro,MsgPack等等 这些序列化方式的性能多数都显著优于hessian2(甚至包括尚未成熟的dubbo序列化).有鉴于此,我们为dubbo引入Kryo和FST这 两种高效Java序列化实现,来逐步取代hessian2.其中,Kryo是一种非常成熟的序列化实现,已经在Twitter.Group

  • Go/Python/Erlang编程语言对比分析及示例代码

    本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性,不过最主要的原因是这几个我比较熟悉. Go的很多语言特性借鉴与它的三个祖先:C,Pascal和CSP.Go的语法.数据类型.控制流等继承于C,Go的包.面对对象等思想来源于Pascal分支,而Go最大的语言特色,基于管道通信的协程并发模型,则借鉴于CSP分支. Go/Python/Erlang语言特性对比 如<编程语言与范式>一文所说,不管语言如何层出不穷

  • java测试框架的方法

    项目开发过程中使用的单元测试框架有Junit.TestNG以及Mockito,Junit和TestNG使用的比较多,Mockito最近才开始使用. TestNG与JUnit的相同点 1. 使用annotation,且大部分annotation相同. 2. 都可以进行单元测试(Unit test). 3. 都是针对Java测试的工具. TestNG与JUnit的不同点: 1. JUnit只能进行单元测试,TestNG可以进行单元测试,功能测试,端到端测试,集成测试等. 2. TestNG需要一个额

  • hystrix配置中Apollo与Archaius对比分析

    目录 前言 ARCHAIUS警告日志 我们遇到的问题 HYSTRIX在FEIGN中的加载过程 SPRINGBOOT自动加载HYSTRIX HYSTRIX的动态兜底配置 APOLLO配置驱动HYSTRIX 结语 前言 feign是一个出色的Http请求客户端封装框架,feign-hystrix是整个框架体系里的其中一个模块,用来集成hystrix熔断器的,feign和hystrix这两个项目都是Netflix开源的(openfeign已独立迭代).在spring boot项目中,可以使用sprin

随机推荐