iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >测试框架JUnitVSTestNG对比分析
  • 255
分享到

测试框架JUnitVSTestNG对比分析

2024-04-02 19:04:59 255人浏览 薄情痞子
摘要

目录引言单元测试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 对测试人员来说更容易,因为它为他们提供了使用测试套件的多种选择。例如,可以通过将类捆绑到组中来执行测试套件。

注释

FEATUREJUNIT 5TESTNG
将该方法标记为测试方法@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的资料请关注编程网其它相关文章!

--结束END--

本文标题: 测试框架JUnitVSTestNG对比分析

本文链接: https://www.lsjlt.com/news/165061.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c语言怎么计算字符串长度
    在C语言中,可以使用内置的strlen()函数来计算字符串的长度。该函数位于string.h头文件中。以下是一个示例代码: #inc...
    99+
    2024-05-14
    c语言
  • c语言怎么判断三个数的大小
    可以通过比较三个数之间的大小关系来判断它们的大小。以下是一个示例代码: #include <stdio.h> int ...
    99+
    2024-05-14
    c语言
  • c++排序函数sort怎么使用
    在C++中,使用sort函数对容器中的元素进行排序,可以按照默认的升序排列,也可以自定义排序规则。 下面是一个简单的例子,对一个ve...
    99+
    2024-05-14
    c++
  • c++中string的compare函数怎么使用
    在C++中,可以使用string的compare函数来比较两个string对象的大小。该函数的原型如下: int compare(c...
    99+
    2024-05-14
    c++
  • c++中string的compare函数有什么用
    c++中string的compare函数用于比较两个字符串的大小关系。该函数返回一个整数值,表示两个字符串的比较结果。 具体来说,如...
    99+
    2024-05-14
    c++
  • c++中print函数的功能有哪些
    在C++中,通常使用std::cout来进行输出操作,而不是使用print函数。std::cout是C++标准库中的一个输出流对象,...
    99+
    2024-05-14
    c++
  • c语言数据结构怎么使用
    在C语言中,数据结构可以通过定义结构体来实现。以下是一些常见的数据结构的使用方法示例: 链表: #include <std...
    99+
    2024-05-14
    c语言
  • c++中print函数的用法是什么
    在C++中没有内置的print函数,但可以使用cout来输出内容到控制台。cout是C++标准库中的一个输出流对象,可以使用<...
    99+
    2024-05-14
    c++
  • c++中concept的用法是什么
    在C++20中,Concept是一种新的语言特性,用于定义类型要求和约束。Concept可以被用来约束函数模板、类模板和普通函数的参...
    99+
    2024-05-14
    c++
  • c++中concept的作用是什么
    在C++中,concept的作用是定义一种通用的约束,用于限制模板参数的类型范围。通过使用concept,可以在编译时对模板参数进行...
    99+
    2024-05-14
    c++
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作