【知识科普】单元测试框架TestNG介绍

文章目录

    • TestNG概述
    • 常用注解说明
    • springboot项目集成
    • 比较完整的示例
      • 步骤 1: 创建被测试的类
      • 步骤 2: 编写TestNG测试用例
      • 步骤 3: 运行测试
      • 步骤 4: 查看测试报告

TestNG概述

TestNG是一个开源的自动化测试框架,它在JUnit和NUnit的基础上增加了很多强大的功能,使其更加灵活和强大。TestNG的灵感来源于JUnit,但它并不是JUnit的扩展,而是一个全新的框架。TestNG的创建者是Cedric Beust,它的设计目标是消除旧框架的大部分限制,使开发人员能够编写更灵活、更强大的测试。

TestNG的主要特点包括:

  1. 注解驱动:TestNG使用注解来配置测试用例,使得测试代码更加简洁明了。
  2. 支持多种测试类型:TestNG不仅支持单元测试,还支持集成测试、端到端测试等多种类型,满足更广泛的测试需求。
  3. 灵活的测试配置:TestNG提供了丰富的配置选项,如测试套件管理、参数化测试、依赖注入等,使得TestNG能够应对各种复杂的测试场景。
  4. 强大的断言库:TestNG提供了丰富的断言库,包括常见的数值断言、字符串断言、对象状态断言等,帮助准确判断测试结果是否符合预期。
  5. 集成第三方库和工具:TestNG可以轻松地与第三方库和工具集成,如Selenium、Appium等,支持各种自动化测试场景。
  6. 多线程测试:TestNG支持在线程池中运行测试,并提供各种可用策略,如单线程、多线程等,验证代码的多线程安全性。
  7. 数据驱动的测试:通过@DataProvider注解,TestNG支持数据驱动的测试,允许使用不同的输入参数执行相同的测试。
  8. 测试分组:TestNG的分组功能允许你根据需求将测试用例分类,然后按组执行,提供了高度的灵活性和控制力。
  9. 依赖测试:使用dependsOnMethodsdependsOnGroups属性,可以指定测试方法之间的依赖关系,确保按照特定顺序执行测试。
  10. 并行测试:TestNG支持并行执行测试,大大减少了测试套件的运行时间。

TestNG通过注解来标识测试方法,如@Test注解用于标记测试方法,@BeforeClass@AfterClass用于标记测试类的初始化和清理方法。TestNG还支持参数化测试,可以通过@Parameters注解传递参数给测试方法。此外,TestNG还提供了@DataProvider注解,用于为测试方法提供复杂的参数或从Java创建的参数。

安装TestNG通常通过Maven或Gradle集成到项目中。在Eclipse或IntelliJ IDEA等IDE中,也可以安装TestNG插件来支持TestNG的编写和运行。编写TestNG测试用例的基本步骤包括:使用IDE生成TestNG的测试程序框架、编写测试代码逻辑、插入TestNG注解标签、配置testng.xml文件设定测试类、测试方法、测试分组的执行信息,以及执行TestNG的测试程序。

总的来说,TestNG是一个功能丰富、灵活的测试框架,它提供了JUnit之外的多种测试特性,适用于各种类型的测试需求。通过使用TestNG,可以编写更加高效和可靠的自动化测试用例,提高软件测试的质量和效率。

常用注解说明

TestNG 使用注解来定义测试用例和测试配置。以下是一些常用的 TestNG 注解及其说明:

  1. @Test

    • 用于标记一个方法为测试方法。
    • 属性包括:
      • groups:指定测试方法所属的组。
      • dataProvider:指定提供测试数据的方法。
      • dependsOnMethods:指定测试方法依赖的其他方法。
      • enabled:指定测试方法是否启用。
      • invocationCount:指定测试方法被调用的次数。
      • threadPoolSize:指定测试方法调用的线程池大小。
  2. @BeforeSuite

    • 在套件中的所有测试运行之前执行一次。
    • 常用于初始化测试环境。
  3. @AfterSuite

    • 在套件中的所有测试运行之后执行一次。
    • 常用于清理测试环境。
  4. @BeforeTest

    • 在每个<test>标签内的类的所有测试方法运行之前执行。
    • 常用于测试类的初始化。
  5. @AfterTest

    • 在每个<test>标签内的类的所有测试方法运行之后执行。
    • 常用于测试类的清理。
  6. @BeforeClass

    • 在当前类的第一个测试方法执行之前执行一次。
    • 常用于类的初始化。
  7. @AfterClass

    • 在当前类的所有测试方法执行之后执行一次。
    • 常用于类的清理。
  8. @BeforeMethod

    • 在每个测试方法执行之前执行。
    • 常用于设置测试方法的前置条件。
  9. @AfterMethod

    • 在每个测试方法执行之后执行。
    • 常用于清理测试方法的后置条件。
  10. @Factory

    • 用于标记一个方法,该方法返回一个当前测试类的对象数组。
    • 用于动态创建测试实例。
  11. @Parameters

    • 用于标记测试方法或@BeforeMethod@AfterMethod等,指示这些方法需要参数注入。
    • 参数值通常从testng.xml配置文件中获取。
  12. @DataProvider

    • 用于标记一个方法,该方法提供测试数据给测试方法。
    • 方法返回值是一个二维Object[][]数组,或者是一个Iterator<Object[]>
  13. @Listeners

    • 用于指定自定义的监听器类,这些监听器类可以监听测试的执行并执行特定的操作。
  14. @IRetryAnalyzer

    • 用于标记一个类,该类实现了重试策略,当测试失败时,TestNG会使用这个策略来决定是否重试测试。
  15. @Optional

    • 用于标记@Parameters注解的参数,表示该参数是可选的,如果参数未提供,则使用注解中指定的默认值。

这些注解可以组合使用,以满足不同的测试需求和配置。通过这些注解,TestNG 提供了强大的测试配置能力和灵活性。

springboot项目集成

在Spring Boot项目中集成TestNG并使用Maven作为构建工具,你需要执行以下步骤:

  1. 添加TestNG依赖
    在项目的pom.xml文件中,添加TestNG的依赖。确保使用最新版本的TestNG。

    <dependencies><!-- 添加TestNG依赖 --><dependency><groupId>org.testng</groupId><artifactId>testng</artifactId><version>7.4.0</version> <!-- 使用最新版本 --><scope>test</scope></dependency><!-- 其他依赖 -->
    </dependencies>
    
  2. 配置Maven Surefire Plugin
    pom.xml中配置Maven Surefire Plugin,以确保Maven可以运行TestNG测试。如果你使用的是Spring Boot,通常不需要额外配置,因为Spring Boot的parent POM已经包含了必要的配置。但是,如果你需要自定义配置,可以按照以下方式进行:

    <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>3.0.0-M7</version> <!-- 使用最新版本 --><configuration><!-- 配置TestNG的XML文件 --><suiteXmlFiles><suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile></suiteXmlFiles><!-- 其他配置 --></configuration></plugin></plugins>
    </build>
    
  3. 创建TestNG测试用例
    创建测试类和方法,使用TestNG的注解来标记它们。例如:

    package com.example.demo;import org.testng.annotations.Test;public class DemoTest {@Testpublic void testDemo() {// 测试逻辑}
    }
    
  4. 创建TestNG配置文件(可选):
    如果你需要更复杂的测试配置,可以创建一个TestNG配置文件(例如testng.xml),并将其放在src/test/resources目录下。例如:

    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
    <suite name="My Test Suite"><test name="My Test"><classes><class name="com.example.demo.DemoTest"/></classes></test>
    </suite>
    
  5. 运行测试
    使用Maven命令运行测试:

    mvn clean test
    

    这个命令会编译项目,运行测试,并且生成测试报告。

  6. 查看测试报告
    测试完成后,Maven Surefire Plugin会在target/surefire-reports目录下生成测试报告。你可以在浏览器中打开index.html文件来查看测试结果。

通过以上步骤,你可以在Spring Boot项目中集成TestNG,并使用Maven来运行测试。这些步骤提供了一个基本的集成流程,你可以根据项目的具体需求进行调整和扩展。

比较完整的示例

下面是一个使用TestNG注解的编码示例,这个例子中我们将使用多个TestNG注解来展示它们的用法。我们将创建一个简单的计算器类SimpleCalculator,然后编写一个测试类SimpleCalculatorTest,该测试类将使用各种TestNG注解来组织和执行测试。

步骤 1: 创建被测试的类

首先,我们创建一个简单的计算器类SimpleCalculator,包含加、减、乘、除的方法。

package com.example.demo;public class SimpleCalculator {public int add(int a, int b) {return a + b;}public int subtract(int a, int b) {return a - b;}public int multiply(int a, int b) {return a * b;}public double divide(int a, int b) {if (b == 0) {throw new IllegalArgumentException("Divider cannot be zero");}return (double) a / b;}
}

步骤 2: 编写TestNG测试用例

接下来,我们编写测试类SimpleCalculatorTest,并使用TestNG注解。

package com.example.demo;import org.testng.annotations.BeforeSuite;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterTest;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.Test;
import org.testng.annotations.DataProvider;
import org.testng.Assert;
import java.util.Arrays;
import java.util.List;public class SimpleCalculatorTest {private SimpleCalculator calculator;@BeforeSuitepublic void initSuite() {System.out.println("Suite starts");}@AfterSuitepublic void finishSuite() {System.out.println("Suite ends");}@BeforeTestpublic void initTest() {System.out.println("Test starts");}@AfterTestpublic void finishTest() {System.out.println("Test ends");}@BeforeClasspublic void initClass() {System.out.println("Class starts");calculator = new SimpleCalculator();}@AfterClasspublic void finishClass() {System.out.println("Class ends");}@BeforeMethodpublic void initMethod() {System.out.println("Method starts");}@AfterMethodpublic void finishMethod() {System.out.println("Method ends");}@Test(dataProvider = "addProvider", groups = "arithmetic")public void testAdd(int a, int b, int expected) {int result = calculator.add(a, b);Assert.assertEquals(result, expected, "Add method failed");}@DataProvider(name = "addProvider")public Object[][] addProvider() {return new Object[][] {{ 1, 1, 2 },{ 2, 2, 4 },{ -1, -1, -2 }};}@Test(dataProvider = "subtractProvider", groups = "arithmetic")public void testSubtract(int a, int b, int expected) {int result = calculator.subtract(a, b);Assert.assertEquals(result, expected, "Subtract method failed");}@DataProvider(name = "subtractProvider")public Object[][] subtractProvider() {return new Object[][] {{ 10, 5, 5 },{ 0, 5, -5 },{ -5, 5, -10 }};}@Test(dataProvider = "multiplyProvider", groups = "arithmetic")public void testMultiply(int a, int b, int expected) {int result = calculator.multiply(a, b);Assert.assertEquals(result, expected, "Multiply method failed");}@DataProvider(name = "multiplyProvider")public Object[][] multiplyProvider() {return new Object[][] {{ 3, 7, 21 },{ 0, 5, 0 },{ -3, -7, 21 }};}@Test(dataProvider = "divideProvider", groups = "arithmetic")public void testDivide(int a, int b, double expected) {double result = calculator.divide(a, b);Assert.assertEquals(result, expected, 0.0001, "Divide method failed");}@DataProvider(name = "divideProvider")public Object[][] divideProvider() {return new Object[][] {{ 10, 2, 5.0 },{ 10, 5, 2.0 },{ -6, 3, -2.0 }};}@Test(expectedExceptions = IllegalArgumentException.class)public void testDivideByZero() {calculator.divide(1, 0);}
}

步骤 3: 运行测试

在命令行中,运行以下Maven命令来执行测试:

mvn clean test

这个命令会编译项目,运行TestNG测试,并生成测试报告。测试报告默认位于target/surefire-reports目录下。

步骤 4: 查看测试报告

打开target/surefire-reports目录下的index.html文件,查看测试结果。

这个例子中,我们使用了以下TestNG注解:

  • @BeforeSuite@AfterSuite:在所有测试之前和之后执行。
  • @BeforeTest@AfterTest:在每个测试之前和之后执行。
  • @BeforeClass@AfterClass:在当前类的所有测试之前和之后执行。
  • @BeforeMethod@AfterMethod:在每个测试方法之前和之后执行。
  • @Test:标记一个方法为测试方法,可以指定数据提供者和测试组。
  • @DataProvider:提供测试数据给测试方法。
  • @ExpectedExceptions:指定测试中预期抛出的异常。

这个例子展示了如何使用TestNG的各种注解来组织和管理测试用例,以及如何使用数据提供者来为测试方法提供参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/56280.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模电板测试分析报告【运放直流偏置电路】

测试方法&#xff1a;输入一个1K正弦波,调节R80观看是否进行偏置调节。 需要接正负电源。 按照这个计算公式&#xff0c;信号在第二极被放大了11倍。 这么看的话第一级也被放大了10倍&#xff1a; R79是用来调节增益的&#xff0c;R80是用来调节偏置的&#xff1a; 芯片介绍&a…

大学生入学审核系统(论文+源码)_kaic

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了大学生入学审核系统的开发全过程。通过分析大学生入学审核系统管理的不足&#xff0c;创建了一个计算机管理大学生入学审核系统的方案。文章介绍了大学生入学审核…

【C语言】你不知道的知识小盲区——柔性数组

文章目录 一、什么是柔性数组二、柔性数组的特点三、柔性数组的使用四、柔性数组的优势 一、什么是柔性数组 也许你从来没有听说过柔性数组&#xff08;flexible array&#xff09;这个概念&#xff0c;但是它确实是存在的。在C99标准中&#xff0c;如果结构体的最后一个成员是…

Spring Integration + MQTT

1. 简介 Spring Integration&#xff1a; Spring Integration是一个开源的Java库&#xff0c;用于构建基于消息的应用程序。它提供了一套丰富的组件和工具&#xff0c;使得开发者可以轻松地开发出可靠、灵活和可扩展的集成解决方案。以下是Spring Integration的一些主要用途&…

电话聊天狂人

给定大量手机用户通话记录&#xff0c;找出其中通话次数最多的聊天狂人。 输入格式: 输入首先给出正整数N&#xff08;≤105&#xff09;&#xff0c;为通话记录条数。随后N行&#xff0c;每行给出一条通话记录。简单起见&#xff0c;这里只列出拨出方和接收方的11位数字构成…

jenkins 插件Publish Over SSH

一、安装插件 二、配置sshserver http://192.168.31.156:8080/manage/configure 三、添加自由风格&#xff1a;PublishOverSSHDemo 我们将工作目录&#xff1a;/var/lib/jenkins/workspace/PublishOverSSHDemo下的图片m3.jpeg 同步到目标143服务器目录&#xff1a;/root/imag…

Python脚本爬取目标网站上的所有链接

一、爬取后txt文件保存 需要先pip install requests和BeautifulSoup库 import requests from bs4 import BeautifulSoup# 定义要爬取的新闻网站URL url https://www.chinadaily.com.cn/ # China Daily 网站# 发送请求获取页面内容 response requests.get(url)# 检查请求是否…

Jgit的使用

Jgit的使用 文章目录 Jgit的使用一&#xff0c;git操作的对应代码1.1 查看操作1.1.1 打开仓库1.1.3 获取状态信息 1.2 添加操作1.2.1 初始化本地仓库1.2.2 创建一个新文件并写入内容1.2.3 添加指定&#xff08;所有&#xff09;文件到暂存区1.2.4 提交操作1.2.5 连接并推送到远…

Android中的三种数据存储方式

目录 1.文件存储 1&#xff09;内部存储 1--MODE_PRIVATE: 2--MODE_APPEND: 3--MODE_WORLD_READABLE: 4--MODE_WORLD_WRITEABLE: 5--简单使用 3&#xff09;外部存储 4&#xff09;内部读取 4&#xff09;外部读取 2.SharePreferences存储 1&#xff09;基本概念 2&#xff09…

设计模式 - 行为模式

行为模式 观察者模式&#xff0c;策略模式&#xff0c;命令模式&#xff0c;中介者模式&#xff0c;备忘录模式&#xff0c;模板方法模式&#xff0c;迭代器模式&#xff0c;状态模式&#xff0c;责任链模式&#xff0c;解释器模式&#xff0c;访问者模式 保存/封装 行为/请求…

MySQL表连接查询算法

前言 MySQL属于关系型数据库&#xff0c;我们建的表大多也都存在业务上的关联关系&#xff0c;同时我们又不可能将所有的数据都冗余一份&#xff0c;这不符合数据库的设计范式。因此&#xff0c;当我们需要把多张表的数据融合在一起的时候&#xff0c;就需要使用到「多表连接查…

CSS伪元素详解

CSS伪元素详解 一、引言 在CSS中&#xff0c;伪元素是一个非常强大的工具&#xff0c;它允许我们为元素的特定部分添加样式&#xff0c;而无需修改HTML结构。这不仅提高了样式的灵活性&#xff0c;还有助于保持代码的整洁和可维护性。本文将深入探讨CSS伪元素的使用方法和一些…

详解tar.gz, tar.xz, tar, gz后缀文件的区别

详解tar.gz, tar.xz,tar, gz后缀文件的区别 tar.gz、tar.xz、tar 和 gz 是常见的文件压缩与归档格式&#xff0c;它们的区别主要在于文件的归档和压缩方式。 1. tar 文件 全称&#xff1a;Tape Archive扩展名&#xff1a;.tar说明&#xff1a;tar 文件本身并没有压缩&#x…

SQL分类中的DDL

DDL&#xff08;Data Definition Language):数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库&#xff0c;表&#xff0c;字段&#xff09;。 一、DDL语句操作数据库 1、查询所有数据库&#xff1a;show databases&#xff1b;&#xff08;一般用大写&#xff…

C语言动态内存开辟

文章目录 malloc函数free函数calloc函数realloc函数二维数组的动态内存开辟 malloc函数 malloc函数包含再#include<stdlib.h>头文件中 void* malloc (size_t size);这个函数向内存申请⼀块连续可⽤的空间&#xff0c;并返回指向这块空间的指针。 如果开辟成功&#xff…

OpenCV-人脸检测

文章目录 一、人脸检测流程二、关键方法三、代码示例四、注意事项 OpenCV是一个开源的计算机视觉和机器学习软件库&#xff0c;它提供了多种人脸检测方法&#xff0c;以下是对OpenCV人脸检测的详细介绍&#xff1a; 一、人脸检测流程 人脸检测是识别图像中人脸位置的过程&…

【Docker系列】Docker查看镜像架构

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

模态与非模态的对话框

本文学习自&#xff1a; 《Qt Creato快速入门》 #include "widget.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }1. #include "widget.h" #include "ui_w…

MySQL数据的导入

【图书推荐】《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;》-CSDN博客 《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;&#xff08;数据库技术丛书&#xff09;》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…

小白也能学会的预测新模型!ReliefF特征选择+XGBoost回归!

小白也能学会的预测新模型&#xff01;ReliefF特征选择XGBoost回归&#xff01; 目录 小白也能学会的预测新模型&#xff01;ReliefF特征选择XGBoost回归&#xff01;预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现ReliefF-XGBoost多变量回归预测 1.excel数据…